49 SECTIONS · 1192 TOPICS
Gitlab CI Roadmap
Understanding GitLab CI/CD Fundamentals
- 1. Understanding CI/CD Concepts
- Example: CI/CD Pipeline Workflow
- Key CI/CD Concepts Summary
- 2. Understanding Pipeline Architecture
- Example: Basic Pipeline Structure
- Key Concepts
- 3. Understanding GitLab CI/CD Terminology
- Example: Pipeline with Multiple Stages
- 4. Understanding Pipeline Types
- 5. Understanding Pipeline Triggers
- Example: Manual Trigger Configuration
- 6. Understanding Pipeline Status
- 7. Understanding Job States
- Example: Job state transition in a pipeline
- 8. Understanding Runner Types
- Example: Using Tags to Match Runners
- 9. Understanding Executor Types
- Example: Using Docker Executor
- 10. Understanding Artifacts vs Cache
- Example: Using Artifacts
- Example: Using Cache
Setting Up Pipeline Configuration
- 1. Creating .gitlab-ci.yml File
- Example: Basic .gitlab-ci.yml Structure
- 2. Understanding YAML Syntax
- Example: Basic YAML Structure
- 3. Defining Pipeline Stages
- Example: Defining Stages in .gitlab-ci.yml
- 4. Setting Default Configuration
- Example: Default configuration with .gitlab-ci.yml
- 5. Setting Global Variables
- Example: Using Global Variables in a Job
- 6. Configuring Workflow Rules
- Example: Using rules for conditional execution
- 7. Using YAML Anchors and Aliases (&, *)
- 8. Using YAML Merge Keys (<<: *)
- Example: Reusing Configuration with Merge Keys
- Example: Defining Merge Key Templates
- 9. Validating Pipeline Syntax
- Example: Basic .gitlab-ci.yml syntax validation
- Validation Checklist
- 10. Using Include for External Configuration
- Example: Including a Local File
- Example: Including a Remote Template
- Example: Including a GitLab CI Template
Installing GitLab Runner
- 1. Installing Runner on Linux
- Example: Registering a Runner
- 2. Installing Runner on macOS
- Example: Install using Homebrew
- Example: Install using official binary
- 3. Installing Runner on Windows
- Example: Registering Runner on Windows
- 4. Installing Runner via Docker
- Example: Run GitLab Runner in a Docker container
- 5. Installing Runner via Kubernetes
- Example: Deploy GitLab Runner using Helm Chart
- Installation Steps
- 6. Using Runner Authentication
- Example: Registering a Runner with Authentication
- 7. Registering Runners
- Example: Registering a Runner with Shell Executor
- 8. Verifying Runner Installation
- Example: Check runner status
- Example: List registered runners
- Example: Check runner configuration
- 9. Understanding Runner Versioning
- Example: Checking Runner Version
- Versioning Strategy
- 10. Managing Runner Configuration File
- Example: Configuration file structure
Configuring GitLab Runner Settings
- 1. Configuring Runner Tags
- Example: Setting Runner Tags
- 2. Setting Runner Concurrency
- Example: Configuring Runner Concurrency
- 3. Setting Runner Limits
- Example: Configuring Runner Limits in
- 4. Configuring Runner Cache
- Example: Basic Cache Configuration
- 5. Setting Runner Timeout
- Example: Setting timeout in config.toml
- 6. Configuring Log Level
- Example: Setting Log Level in gitlab-runner config
- 7. Setting Check Interval
- Example: Configuring check_interval in config.toml
- 8. Configuring Session Server
- Example: Enabling Session Server in config.toml
- 9. Using Runner Feature Flags (FF_*)
- Example: Setting Feature Flags
- 10. Configuring Pre-Clone and Post-Clone Scripts
- Example: Using pre_clone_script and post_clone_script
Configuring Runner Executors
- 1. Using Shell Executor
- Example: Configuring Shell Executor in .gitlab-ci.yml
- 2. Using Docker Executor
- Example: Docker Executor Configuration
- 3. Using Kubernetes Executor
- Example: Kubernetes Executor Configuration
- 4. Using SSH Executor
- Example: SSH Executor Configuration
- 5. Using VirtualBox Executor
- Example: Configuring VirtualBox Executor
- 6. Using Docker Machine Executor
- Example: Configuring Docker Machine Executor
- 7. Using Custom Executor
- Example: Custom Executor Configuration
- 8. Configuring Executor-Specific Settings
- Example: Docker Executor Configuration
- Example: Kubernetes Executor Configuration
- 9. Configuring Executor Volumes
- Example: Configuring Volume Mounts in GitLab CI
- 10. Managing Executor Security
- Example: Configuring Runner Security with Environment Variables
- Security Best Practices for Executor Configuration
Defining Jobs and Scripts
- 1. Creating Basic Job Definition
- Example: Basic job definition
- 2. Assigning Jobs to Stages
- Example: Defining Jobs in Stages
- 3. Defining Job Scripts
- Example: Basic script usage
- Example: Using before_script and after_script
- 4. Using before_script Hook
- Example: before_script with multiple commands
- 5. Using after_script Hook
- Example: after_script with cleanup
- 6. Setting Job Images
- Example: Using a Custom Image
- 7. Configuring Job Services
- Example: Using a PostgreSQL Service
- 8. Setting Job Timeout
- Example: Setting a 30-minute job timeout
- 9. Using retry for Failed Jobs
- Example: Retry configuration
- 10. Setting Job Tags
- Example: Setting Job Tags
Using Job Dependencies and Artifacts Passing
- 1. Setting Job Dependencies
- Example: Basic needs usage
- Example: Needs with artifacts
- 2. Using needs for DAG Pipelines
- Example: Basic needs usage
- Example: Using needs with pipeline reference
- Key Points
- 3. Creating Directed Acyclic Graph
- Example: Basic DAG Configuration
- 4. Passing Artifacts Between Jobs
- Example: Artifact Configuration
- 5. Using needs:artifacts Configuration
- Example: Using needs:artifacts
- 6. Implementing Optional Dependencies
- Example: Using
- 7. Using Cross-Stage Dependencies
- Example: Defining a Job with Cross-Stage Dependency
- Key Points
- 8. Understanding Job Ordering
- Example: Basic Job Dependency
- Key Concepts
- 9. Implementing Fan-In Patterns
- Example: Fan-In Pattern with Artifacts
- Key Points
- 10. Implementing Fan-Out Patterns
- Example: Fan-Out with Dependencies
Working with Job Rules and Conditions
- 1. Defining Job Rules
- Example: Basic job rules with
- Example: Using
- Example: Setting variables in rules
- 2. Using if Conditionals
- Example: Conditional Job Execution
- 3. Matching File Changes
- Example: Using
- 4. Using exists for File Detection
- Example: Using exists in a job rule
- 5. Controlling Job Creation
- Example: Using rules for conditional job execution
- 6. Setting Variables in Rules
- Example: Setting Variables Based on Branch
- Example: Conditional Variable with GitLab Variables
- 7. Combining Multiple Rule Conditions
- Example: Combining multiple conditions in a rule
- 8. Using allow_failure with Rules
- Example: Using allow_failure with rules
- 9. Creating Manual Jobs (when: manual)
- Example: Manual Job Configuration
- 10. Using only and except
- Example: Using only and except
- Key Points
Working with Predefined Variables
- 1. Using Project Variables (CI_PROJECT_*)
- Example: Using CI_PROJECT_NAME in a script
- 2. Using Pipeline Variables (CI_PIPELINE_*)
- Example: Using CI_PIPELINE_ID in a Script
- 3. Using Job Variables (CI_JOB_*)
- Example: Using CI_JOB_ID in a script
- Example: Using CI_JOB_NAME to conditionally run a task
- 4. Using Commit Variables (CI_COMMIT_*)
- Example: Using Commit Variables in a Job
- 5. Using Merge Request Variables (CI_MERGE_REQUEST_*)
- Example: Using Merge Request Variables in a Pipeline
- 6. Using Tag Variables
- Example: Using Tag Variables in a Job
- 7. Using Environment Variables (CI_ENVIRONMENT_*)
- Example: Setting environment variable in a job
- 8. Using Runner Variables (CI_RUNNER_*)
- Example: Using Runner Variables in a Script
- 9. Using Registry Variables (CI_REGISTRY_*)
- Example: Pushing to GitLab Container Registry
- 10. Using Server Variables (CI_SERVER_*)
- Example: Using CI_SERVER_VERSION in a script
Managing Pipeline Variables and Secrets
- 1. Defining Pipeline Variables
- Example: Setting a Project Variable in .gitlab-ci.yml
- 2. Setting Job-Level Variables
- Example: Setting a Job-Level Variable
- 3. Using Environment Variables in Scripts ($VAR)
- Example: Using CI_PIPELINE_ID in a script
- Example: Using CI_COMMIT_SHA in a script
- 4. Expanding Variable References ($VAR, ${VAR})
- Example: Using Variable References in Scripts
- 5. Masking Sensitive Variables
- Example: Setting a masked variable in .gitlab-ci.yml
- 6. Protecting Variables
- Example: Setting a Protected Variable
- 7. Setting Variable Scope
- Example: Setting Project-Level Variables in .gitlab-ci.yml
- Example: Setting Job-Level Variables in .gitlab-ci.yml
- 8. Using File-Type Variables
- Example: Using file-type variables in a script
- 9. Accessing Project and Group Variables
- Example: Using Project Variables in a Job
- Example: Using Group Variables
- 10. Using Raw Variables
- Example: Using raw variables in a script
Using Dynamic Variables and Configuration
- 1. Using dotenv for Dynamic Variables
- Example: Setting up dotenv in a GitLab CI job
- 2. Using Variables from Previous Jobs
- Example: Accessing job variables in subsequent jobs
- 3. Generating Dynamic Configuration
- Example: Using GitLab CI Variables in Configuration
- 4. Creating Dynamic Job Names
- Example: Dynamic Job Name Based on Branch
- Example: Using Pipeline ID in Job Name
- 5. Using Dynamic Includes
- Example: Using
- 6. Using Variable Expressions (${VAR:-default})
- Example: Setting a Default Image Tag
- 7. Creating Conditional Variables
- Example: Setting Conditional Variables in .gitlab-ci.yml
- 8. Using Multi-Line Variables
- Example: Setting a Multi-Line Variable in GitLab CI
- 9. Implementing Variable Inheritance
- Example: Inheriting Variables in a Job
- 10. Implementing Dynamic Environments
- Example: Environment Configuration
- Example: Dynamic Environment Variables
Working with Include and Templates
- 1. Including Local Files
- Example: Including a local template file
- 2. Including Remote Files
- Example: Including a remote CI configuration
- 3. Using Project Templates
- Example: Using a Project Template
- Example: Extending a Template
- 4. Including GitLab Templates
- Example: Using a project template
- Example: Including a local template file
- Example: Including a remote template
- 5. Using Component-Based Includes
- Example: Including a Component
- 6. Extending Job Configurations
- Example: Extending a Job Configuration
- 7. Using Hidden Jobs
- Example: Define a hidden job
- 8. Creating Reusable Job Templates (!reference)
- Example: Using !reference to extend a template
- 9. Overriding Included Jobs (job redefinition)
- Example: Overriding a job script
- 10. Using Template Variables (TEMPLATE_*)
- Example: Using Template Variables in a Job
Working with Docker Images
- 1. Using Docker Images
- Example: Using a Docker image in a job
- Example: Using a service with Docker image
- 2. Specifying Image Tags
- Example: Using Tag in GitLab CI
- 3. Setting Image Entrypoint
- Example: Setting entrypoint in a job
- 4. Pulling Images from Private Registries
- Example: Using GitLab Container Registry
- 5. Using CI_REGISTRY Variables
- Example: Pushing an image to the registry
- 6. Configuring Pull Policy
- Example: Setting Pull Policy in .gitlab-ci.yml
- 7. Using Image Aliases
- Example: Defining Image Aliases in .gitlab-ci.yml
- 8. Caching Docker Images
- Example: Caching Docker Images in GitLab CI
- 9. Using Minimal Base Images
- Example: Using Alpine as Base Image in GitLab CI
- 10. Debugging Image Issues
- Example: Inspect Docker Image Layers
- Example: Check Image Size
Working with Docker Services
- 1. Configuring Docker Services
- Example: Configuring a PostgreSQL Service
- 2. Setting Service Aliases
- Example: Defining a service with an alias
- 3. Using Database Services
- Example: Using PostgreSQL service in a job
- 4. Using Redis Service
- Example: Using Redis in a Job
- 5. Using Elasticsearch Service
- Example: Elasticsearch Service Configuration
- 6. Using Docker-in-Docker Service
- Example: Using Docker-in-Docker in a Job
- 7. Configuring Service Health Checks
- Example: Configuring a service with health checks
- 8. Setting Service Variables
- Example: Using Service Variables in a Job
- 9. Using Service Entrypoint
- Example: Setting a custom entrypoint
- 10. Networking Between Job and Services
- Example: Connecting to a Database Service
Building Docker Images in Pipelines
- 1. Building Images with Docker Build
- Example: Building a Docker Image in GitLab CI
- 2. Using Docker-in-Docker
- Example: Building and pushing a Docker image using DnD
- 3. Using Kaniko for Builds
- Example: Basic Kaniko Job Configuration
- Key Features of Kaniko
- 4. Using Buildah for Builds
- Example: Buildah Docker Image
- Key Features of Buildah
- 5. Using Multi-Stage Docker Builds
- Example: Multi-stage build in GitLab CI
- 6. Optimizing Build Cache (--cache-from)
- Example: Using --cache-from with Docker Build
- 7. Building Multi-Architecture Images
- Example: Building for AMD64 and ARM64
- 8. Using Build Arguments (--build-arg)
- Example: Setting Build Arguments in GitLab CI
- 9. Setting Build Context
- Example: Setting build context in a GitLab CI job
- 10. Tagging Images
- Example: Using Git Tags for Image Tagging
- Example: Tagging with Branch and Commit SHA
Managing Artifacts
- 1. Defining Artifacts
- Example: Defining Artifacts in a Job
- 2. Setting Artifact Paths
- Example: Basic Artifact Path Configuration
- Example: Using Wildcards in Artifact Paths
- 3. Excluding Files from Artifacts
- Example: Exclude specific files from artifacts
- 4. Setting Artifact Expiration
- Example: Setting Artifact Expiration
- 5. Using artifacts:when Conditions
- Example: Using artifacts:when with on_success
- Example: Using artifacts:when with always
- 6. Exposing Artifacts
- Example: Exposing Test Artifacts
- Example: Exposing Build Artifacts
- 7. Using Untracked Files
- Example: Using untracked files in artifacts
- 8. Naming Artifacts
- Example: Naming Artifacts
- 9. Downloading Artifacts via API
- Example: Download Artifact via API
- 10. Viewing Artifacts in Merge Requests
- Example: Accessing Merge Request Artifacts
Using Artifact Reports
- 1. Using JUnit Reports
- Example: Configuring JUnit Reports in .gitlab-ci.yml
- 2. Using Coverage Reports
- Example: Configuring Coverage Report in .gitlab-ci.yml
- 3. Using Code Quality Reports
- Example: Configuring Code Quality Report in .gitlab-ci.yml
- 4. Using SAST Reports
- Example: Configure SAST Report in GitLab CI
- 5. Using Dependency Scanning Reports
- Example: Configuring Dependency Scanning
- 6. Using Container Scanning Reports
- Example: Container Scanning Job Configuration
- 7. Using DAST Reports
- Example: DAST Report Configuration
- 8. Using License Reports
- Example: License Report Configuration
- 9. Using dotenv Reports
- Example: dotenv Report Configuration
- 10. Using Terraform Reports
- Example: Configuring Terraform Report
Implementing Caching Strategies
- 1. Defining Cache Configuration
- Example: Basic Cache Configuration
- Example: Cache with TTL
- 2. Setting Cache Paths
- Example: Basic Cache Configuration
- Example: Cache with Wildcards
- 3. Using Cache Keys
- Example: Using Cache Keys in a Job
- 4. Creating Dynamic Cache Keys
- Example: Using GitLab CI Variables in Cache Keys
- Example: Dynamic Cache Key with Build Dependencies
- 5. Using Cache Key Prefix
- Example: Cache Key Prefix with Branch Name
- Example: Cache Key with Build Type
- 6. Setting Cache Policy
- Example: Basic Cache Configuration
- Example: Cache with TTL
- 7. Configuring Cache Fallback
- Example: Configuring Cache Fallback
- 8. Using Distributed Cache
- Example: Configuring GitLab CI to use a Redis cache
- 9. Optimizing Cache for Dependencies
- Example: Caching Node.js Dependencies
- 10. Clearing Cache
- Example: Clearing Pipeline Cache
Working with Parallel Jobs
- 1. Controlling Job Parallelism
- Example: Using parallel jobs
- Example: Using parallel matrix
- 2. Using Parallel with Index
- Example: Using parallel with index
- Key Points
- 3. Distributing Tests Across Parallel Jobs
- Example: Distributing tests across parallel jobs
- Key Points
- 4. Using Parallel for Build Distribution
- Example: Parallel Build Distribution
- Example: Matrix Parallel Jobs
- 5. Implementing Parallel Deployments
- Example: Parallel Deployment Strategy
- Key Concepts
- 6. Using needs with Parallel Jobs
- Example: Using needs with parallel jobs
- 7. Optimizing Parallel Execution
- Example: Using
- Example: Limiting Concurrent Jobs
- Example: Parallel Matrix Jobs
- 8. Debugging Parallel Job Issues
- Example: Identifying Job Failures in Parallel Execution
- Debugging Steps for Parallel Jobs
- 9. Setting Parallel Limits
- Example: Using parallel with matrix
- 10. Using Parallel with Matrix
- Example: Parallel Jobs with Matrix
Using Matrix Builds
- 1. Creating Matrix Jobs
- Example: Basic Matrix Job Configuration
- Example: Matrix with Variables
- 2. Defining Matrix Variables
- Example: Matrix Variables in .gitlab-ci.yml
- 3. Combining Matrix with Variables
- Example: Using Matrix Variables in Jobs
- 4. Using Matrix for Multi-Platform Builds
- Example: Matrix Configuration for Multi-Platform Builds
- 5. Using Matrix for Multi-Version Testing
- Example: Matrix Build Configuration
- Example: Including Custom Configurations
- Example: Excluding Specific Combinations
- 6. Using Matrix for Cross-Browser Testing
- Example: Matrix Configuration for Cross-Browser Testing
- 7. Filtering Matrix Combinations
- Example: Using
- 8. Using Matrix with needs
- Example: Using needs with matrix jobs
- 9. Optimizing Matrix Performance
- Example: Parallel Jobs with Caching
- 10. Debugging Matrix Configurations
- Example: Using
- Debugging Workflow
Using Job Triggers and Child Pipelines
- 1. Creating Pipeline Triggers
- Example: Basic Pipeline Trigger Configuration
- 2. Triggering Child Pipelines
- Example: Triggering a Child Pipeline
- 3. Using Trigger Strategies
- Example: Pipeline Trigger Configuration
- Example: Manual Trigger Job
- 4. Passing Variables to Triggered Pipelines
- Example: Triggering a Pipeline with Variables
- 5. Using Forward Variables
- Example: Forwarding Variables in a Trigger Job
- 6. Creating Parent-Child Pipelines
- Example: Triggering a Child Pipeline
- Key Points
- 7. Triggering via API
- Example: Triggering a Pipeline via API
- 8. Using Trigger Rules
- Example: Using Trigger Rules in a Pipeline
- 9. Waiting for Child Pipeline
- Example: Wait for child pipeline completion
- 10. Debugging Trigger Issues
- Example: Trigger Job Configuration
- Common Debugging Steps
Using Multi-Project Pipelines
- 1. Triggering Multi-Project Pipelines
- Example: Triggering a Pipeline in Another Project
- 2. Using Downstream Pipelines
- Example: Triggering a Downstream Pipeline
- Key Points
- 3. Passing Artifacts Between Projects
- Example: Fetching artifacts from another project
- 4. Setting Project Permissions
- Example: Setting Pipeline Permissions via API
- 5. Using Cross-Project Dependencies
- Example: Triggering a Pipeline in Another Project
- Key Points
- 6. Implementing Microservice Pipelines
- Example: Triggering a Pipeline in Another Project
- Example: Passing Variables to a Multi-Project Pipeline
- Key Points
- 7. Using needs:project Configuration
- Example: Using needs:project to fetch artifacts from another project
- 8. Tracking Multi-Project Status
- Example: Pipeline Status API Response
- 9. Debugging Multi-Project Pipelines
- Example: Using debug job in multi-project pipeline
- Debugging Workflow
- Debugging Tips
- 10. Implementing Release Coordination
- Example: Creating a Release
Working with Pipeline Schedules
- 1. Creating Pipeline Schedules
- Example: Creating a Schedule via API
- 2. Setting Schedule Variables
- Example: Using Scheduled Variables in a Job
- 3. Using Scheduled Pipeline Rules
- Example: Scheduled Pipeline with Variables
- 4. Configuring Cron Syntax
- Example: Cron Syntax in GitLab CI/CD
- 5. Setting Schedule Timezone
- Example: Setting Schedule Timezone
- 6. Using Schedule for Nightly Builds
- Example: Schedule Configuration
- 7. Using Schedule for Periodic Scans
- Example: Schedule a Daily Security Scan
- 8. Deactivating Schedules
- Example: Deactivating a Schedule via GitLab UI
- 9. Running Schedules Manually
- Example: Manual Trigger via API
- 10. Monitoring Schedule Execution
- Example: Check schedule status via API
Working with Merge Request Pipelines
- 1. Enabling Merge Request Pipelines
- Example: Enabling MR Pipelines with Rules
- 2. Using Merge Request Variables (CI_MERGE_REQUEST_*)
- Example: Using Merge Request Variables in a Pipeline
- 3. Running Only on MR
- Example: Running job only on MRs
- 4. Using Merged Results Pipelines
- Example: Enabling Merged Results Pipelines
- 5. Implementing Merge Trains
- Example: Enabling Merge Trains
- Key Features of Merge Trains
- Merge Trains vs Regular Merging
- 6. Using Coverage Comparison
- Example: Setting up coverage comparison in a GitLab CI job
- How Coverage Comparison Works
- 7. Setting MR Pipeline Strategy
- Example: Configuring MR Pipeline Strategy
- 8. Blocking MR on Pipeline Failure
- Example: Enabling Merge Request Pipeline Blocking
- 9. Running MR-Specific Jobs
- Example: Running MR-specific job
- 10. Using MR Labels in Rules
- Example: Using MR Labels in Rules
Working with Environments and Deployments
- 1. Defining Environments
- Example: Defining a staging environment in a job
- 2. Setting Environment URLs
- Example: Setting Environment URL in CI/CD
- 3. Using Dynamic Environments
- Example: Deploy to Dynamic Environment
- 4. Configuring Deployment Jobs
- Example: Basic Deployment Job Configuration
- Example: Environment with Stop Action
- 5. Using Environment Tiers
- Example: Environment Tier Configuration
- 6. Creating Review Apps
- Example: Enable Review App for a Job
- 7. Stopping Environments
- Example: Stopping an Environment
- 8. Auto-Stopping Inactive Environments
- Example: Configure auto-stop for an environment
- 9. Protecting Environments
- Example: Protecting an Environment
- 10. Tracking Deployments
- Example: Deployment Tracking in GitLab CI
Implementing Release Automation
- 1. Creating Releases
- Example: Creating a Release
- 2. Setting Release Name and Tag
- Example: Setting Release Name and Tag in GitLab CI
- 3. Adding Release Description
- Example: Setting Release Description
- 4. Creating Release Assets
- Example: Creating Release Assets
- 5. Generating Changelog
- Example: Using GitLab Changelog Generator
- 6. Using Semantic Versioning
- Example: Version Bump in GitLab CI
- Comparison: Manual vs Automated Versioning
- 7. Automating Version Bumps
- Example: Using GitLab CI to Bump Version
- 8. Publishing Release Notes
- Example: Publishing Release Notes
- 9. Using Release Milestones
- Example: Configure Release Milestone in GitLab CI
- 10. Creating Pre-Release Versions
- Example: Creating a Pre-Release Version
Implementing Testing Strategies
- 1. Running Unit Tests
- Example: Unit Test Configuration
- 2. Running Integration Tests
- Example: Integration Test Job Configuration
- 3. Running End-to-End Tests
- Example: End-to-End Test Configuration
- 4. Using Test Fixtures
- Example: Setting Up a Mock Service in GitLab CI
- 5. Parallel Test Execution
- Example: Running Tests in Parallel Jobs
- Best Practices for Parallel Test Execution
- 6. Configuring Test Coverage
- Example: Configuring test coverage in GitLab CI
- 7. Setting Coverage Regex
- Example: Configuring Coverage Regex
- 8. Splitting Tests by Timing
- Example: Splitting Test Jobs in GitLab CI
- Timing-Based Test Strategy
- 9. Implementing Test Retries
- Example: Retry configuration in GitLab CI
- 10. Generating Test Reports
- Example: Configuring JUnit Test Reports
- Example: Configuring Cobertura Code Coverage Reports
Implementing Code Quality Checks
- 1. Using Code Quality Template
- Example: Include code quality template in a GitLab CI job
- Summary of Code Quality Template Components
- 2. Running Linting Jobs
- Example: ESLint Configuration
- 3. Running Static Analysis
- Example: Using ESLint in a GitLab CI Job
- 4. Configuring Code Quality Thresholds
- Example: Setting Code Quality Thresholds in .gitlab-ci.yml
- 5. Using Code Climate Integration
- Example: Code Climate Configuration in .gitlab-ci.yml
- 6. Generating Code Coverage Reports
- Example: Configuring Code Coverage in GitLab CI
- 7. Using Coverage Visualization
- Example: Setting up Code Coverage in GitLab CI
- Supported Coverage Report Formats
- Steps to Visualize Coverage
- 8. Implementing Quality Gates
- Example: Code Coverage Gate
- 9. Tracking Code Quality Trends
- Example: Code Coverage Report Configuration
- Workflow: Tracking Trends Over Time
- 10. Customizing Code Quality Tools
- Example: Customizing ESLint Rules
- Example: Configuring Prettier
Implementing Security Scanning
- 1. Running SAST Scans
- Example: Basic SAST job configuration
- Example: SAST with custom config
- 2. Running Dependency Scanning
- Example: Enable Dependency Scanning in a Pipeline
- 3. Using Container Scanning
- Example: Enable container scanning in GitLab CI
- Container Scanning Workflow
- 4. Running DAST Scans
- Example: DAST Scan Configuration
- 5. Implementing Secret Detection
- Example: Basic secret detection configuration
- 6. Using License Scanning
- Example: License Scanning Configuration
- Example: License Report Output
- 7. Running Coverage-Guided Fuzzing
- Example: Configuring a Fuzzing Job
- 8. Implementing API Security Testing
- Example: API Security Scan with OWASP ZAP
- 9. Using Security Dashboards
- Example: Configuring Security Dashboard in GitLab
- Security Dashboard Features
- Setting Up Security Dashboard
- 10. Configuring Security Policies
- Example: SAST Policy Configuration
- Example: DAST Policy Configuration
Working with Container Registry
- 1. Authenticating to Registry
- Example: Using Registry Credentials in a Job
- 2. Using CI_REGISTRY Variables
- Example: Pushing an image to GitLab Container Registry
- 3. Building and Pushing Images
- Example: Building and Pushing an Image
- 4. Tagging Images ($CI_COMMIT_REF_SLUG)
- Example: Using
- Example: Using
- 5. Using Multi-Architecture Images
- Example: Building Multi-Architecture Images with Docker Buildx
- Key Points
- 6. Scanning Container Images
- Example: Enable image scanning in GitLab CI/CD
- 7. Cleaning Up Old Images
- Example: Configure Cleanup Policy in .gitlab-ci.yml
- 8. Using Registry API
- Example: Fetching Registry Repositories
- Example: Deleting a Tag
- 9. Configuring Registry Mirrors
- Example: Configure registry mirror in GitLab CI
- Configuration Summary
- 10. Implementing Image Signing
- Example: Enable image signing in a GitLab CI job
Managing Package Registry
- 1. Publishing npm Packages
- Example: Publishing to npm registry
- Example: Using GitLab CI to publish
- 2. Publishing Maven Artifacts
- Example: Publishing to GitLab Package Registry
- 3. Publishing Python Packages
- Example: Publishing to GitLab Package Registry
- Key Steps
- 4. Publishing Go Modules
- Example: Publishing to GitLab Package Registry
- Example: GitLab CI Configuration
- 5. Using Generic Package Registry
- Example: Uploading a Generic Package
- Example: Downloading a Generic Package
- 6. Publishing Composer Packages
- Example: Publishing to GitLab Package Registry
- 7. Publishing NuGet Packages
- Example: Publishing a NuGet Package
- 8. Using Conan Packages
- Example: Using Conan in GitLab CI
- 9. Configuring Package Registry Authentication
- Example: Using GitLab CI/CD with Package Registry
- 10. Managing Package Versions and Cleanup
- Example: Configuring Package Cleanup
Using GitLab Pages
- 1. Configuring GitLab Pages
- Example: GitLab Pages Configuration in
- 2. Setting Pages Artifacts
- Example: Configure GitLab Pages artifacts
- 3. Using Custom Domains
- Example: Configuring Custom Domain in
- 4. Deploying Static Site Generators
- Example: Deploying a Hugo Site
- Example: Deploying a Jekyll Site
- 5. Building React/Vue Apps for Pages
- Example: Basic React App Build Configuration
- Example: Building a Vue App with Custom Output Path
- React vs Vue Build Process
- 6. Configuring SSL for Pages
- Example: GitLab Pages with Custom Domain and SSL
- 7. Using pages:path_prefix
- Example: Setting path_prefix in .gitlab-ci.yml
- 8. Setting Pages Access Control
- Example: Configuring Pages Access Control
- 9. Using Pages with Subgroups
- Example: Configuring Pages in a Subgroup
- 10. Deploying Documentation Sites
- Example: Deploying documentation with MkDocs
Deploying to Cloud Platforms
- 1. Deploying to AWS
- Example: Basic AWS Deployment Configuration
- Example: Deploying to AWS Lambda
- Deployment Options Comparison
- 2. Using AWS ECS Deployments
- Example: Deploying to AWS ECS
- 3. Deploying to Google Cloud
- Example: Deploying to Google App Engine
- Example: Deploying to Google Kubernetes Engine
- 4. Using Azure Deployments
- Example: Deploying to Azure App Service
- Deployment Steps
- 5. Deploying to Heroku
- Example: Deploying to Heroku
- 6. Using DigitalOcean Deployments
- Example: Deploy to DigitalOcean App Platform
- Deployment Process
- 7. Deploying Serverless Functions
- Example: Deploying to AWS Lambda
- 8. Configuring Terraform Deployments
- Example: Basic Terraform Deployment Configuration
- 9. Using Infrastructure as Code
- Example: Deploying a VPC with GitLab CI
- Key Concepts in IaC with GitLab CI
- 10. Managing Cloud Credentials
- Example: Using AWS Credentials in a Job
Implementing CI/CD for Kubernetes
- 1. Configuring kubectl Access
- Example: Setting up kubectl in GitLab CI
- 2. Using Kubernetes Executor
- Example: Basic Kubernetes Executor Configuration
- 3. Deploying with kubectl
- Example: Deploying a Kubernetes Deployment
- Example: Updating a Deployment Image
- Example: Rolling Out a New Version
- 4. Using Helm Charts
- Example: Deploying with Helm in GitLab CI
- 5. Configuring Agent for Kubernetes
- Example: Kubernetes Agent Configuration
- 6. Using Review Apps on Kubernetes
- Example: Enabling Review Apps for Kubernetes
- Review Apps Benefits
- Review Apps vs Staging Environments
- 7. Implementing Auto Deploy
- Example: Enabling Auto DevOps
- Example: Deploying to Kubernetes
- 8. Using kustomize for Deployments
- Example: GitLab CI/CD with Kustomize
- 9. Configuring Namespace Management
- Example: Creating a namespace in GitLab CI
- 10. Using GitOps with ArgoCD
- Example: ArgoCD Application Definition
- GitOps Workflow with ArgoCD
- GitOps Tools Comparison
Implementing Advanced Deployment Patterns
- 1. Implementing Blue-Green Deployments
- Example: GitLab CI/CD Blue-Green Deployment
- Benefits of Blue-Green Deployment
- 2. Using Canary Deployments
- Example: Canary Deployment Configuration
- Canary Deployment Benefits
- 3. Implementing Rolling Updates
- Example: Rolling Update Configuration
- 4. Using Shadow Deployments
- Example: Shadow Deployment Configuration
- Key Benefits of Shadow Deployments
- 5. Creating A/B Testing Pipelines
- Example: A/B Testing Pipeline Configuration
- Key Concepts in A/B Testing Pipelines
- 6. Implementing Feature Flag Deployments
- Example: Feature Flag in GitLab CI
- Feature Flag vs. Environment-Based Deployment
- 7. Using Progressive Delivery
- Example: Canary Release with GitLab CI/CD
- Example: Blue-Green Deployment Strategy
- Key Benefits of Progressive Delivery
- 8. Implementing Rollback Strategies
- Example: Automated Rollback in GitLab CI
- 9. Using Deployment Rings
- Example: Deployment Ring Configuration
- 10. Implementing GitOps Workflows
- Example: GitOps Pipeline Configuration
- GitOps vs Traditional Deployment
- GitOps Workflow Steps
Working with Notifications and Integrations
- 1. Configuring Email Notifications
- Example: Email Notification Configuration
- 2. Using Slack Notifications
- Example: Slack Notification Configuration
- 3. Configuring Microsoft Teams Notifications
- Example: GitLab CI Configuration
- 4. Using Discord Notifications
- Example: GitLab CI Configuration
- 5. Implementing Custom Webhooks
- Example: Setting up a Custom Webhook in GitLab CI
- Key Considerations for Webhook Implementation
- 6. Using ChatOps Integrations
- Example: Slack Integration Setup
- ChatOps Integration Benefits
- 7. Configuring Jira Integration
- Example: GitLab CI/CD Configuration
- 8. Using PagerDuty Integration
- Example: Configure PagerDuty Integration in .gitlab-ci.yml
- Integration Workflow
- 9. Implementing Custom Notification Scripts
- Example: Custom Notification Script
- Key Points
- 10. Using GitLab API for Notifications
- Example: Get Project Notifications
- Example: Update Project Notifications
Working with CI/CD API and Automation
- 1. Using CI/CD Pipeline API
- Example: Fetching Pipeline Details
- Example: Triggering a New Pipeline
- 2. Triggering Pipelines via API
- Example: Triggering a Pipeline
- 3. Managing Jobs via API
- Example: Get job details
- Example: Cancel a job
- Example: Retry a failed job
- 4. Using Job Tokens (CI_JOB_TOKEN)
- Example: Using CI_JOB_TOKEN to access GitLab API
- 5. Accessing GitLab API in Jobs
- Example: Using GitLab API Token in CI Job
- 6. Configuring Pipeline Webhooks
- Example: Setting up a Webhook
- Webhook Event Types
- 7. Creating Pipeline Badges
- Example: Adding a Build Status Badge to README.md
- Badge Configuration Options
- 8. Using Coverage Badges
- Example: Adding Coverage Badge to README
- 9. Implementing Custom Integrations
- Example: Triggering a Pipeline via API
- Example: Using GitLab API to Get Pipeline Status
- Custom Integration Best Practices
- 10. Using GraphQL API for CI/CD
- Example: Query project pipelines
- Example: Mutate pipeline variables
Working with Monorepo Pipelines
- 1. Using rules:changes for Selective Execution
- Example: Using rules:changes to run jobs only on relevant file changes
- 2. Implementing Microservice Pipelines
- Example: Pipeline Configuration for Microservice
- Example: Shared Job Template
- Key Considerations for Microservice Pipelines
- 3. Using needs for Complex Dependencies
- Example: Using needs with job dependency
- Example: Using needs with artifacts
- 4. Creating Component-Specific Jobs
- Example: Component-specific job configuration
- Example: Using component variables
- 5. Using Dynamic Child Pipelines
- Example: Triggering a Dynamic Pipeline
- Key Points
- 6. Implementing Cross-Project Dependencies
- Example: Triggering a Pipeline in Another Project
- Example: Using Variables in Cross-Project Triggers
- 7. Using Path-Based Job Triggers
- Example: Path-Based Job Trigger
- Example: Excluding Paths
- 8. Optimizing Artifact Passing in Monorepos
- Example: Using
- Example: Using
- Example: Using
- 9. Using Matrix for Multi-Component Testing
- Example: Matrix Job Configuration
- 10. Implementing Conditional Deployments
- Example: Using Rules for Conditional Deployments
- Example: Deploying Only on Specific File Changes
Using Advanced Pipeline Patterns
- 1. Using Bridge Jobs
- Example: Basic Bridge Job Configuration
- 2. Implementing Fan-In Fan-Out Patterns
- Example: Fan-Out Fan-In with Parallel Jobs
- Key Concepts
- 3. Using Pipeline Generators
- Example: Basic Pipeline Generator
- Key Points
- 4. Creating Conditional Stages
- Example: Basic Conditional Stage
- Example: Conditional Stage with Variables
- 5. Implementing Dynamic Pipeline Creation
- Example: Using
- Example: Conditional Pipeline Jobs Based on Branch
- Dynamic Pipeline Creation Patterns
- 6. Using Cross-Project Pipeline Dependencies
- Example: Triggering a Pipeline in Another Project
- Key Considerations
- 7. Creating Pipeline as Code Patterns
- Example: Basic Pipeline Template
- Example: Using Variables in Templates
- Best Practices for Pipeline Templates
- 8. Implementing Event-Driven Pipelines
- Example: Triggering a Pipeline on Merge Request
- Example: Using Scheduled Pipelines
- Key Features of Event-Driven Pipelines
- 9. Using Pipeline Composition Patterns
- Example: Using
- Example: Extending Jobs with Templates
- Key Benefits of Pipeline Composition
- 10. Creating Self-Healing Pipelines
- Example: Retry on Failure
- Example: Conditional Rollback
- Key Concepts
Working with CI/CD Components and Catalog
- 1. Creating Reusable Components
- Example: Define a reusable component in a YAML file
- Key Features of Reusable Components
- 2. Publishing to CI/CD Catalog
- Example: Publishing a Pipeline Template
- Key Steps for Publishing
- 3. Using Component Inputs
- Example: Using Component Inputs
- 4. Versioning Components
- Example: Versioning in GitLab CI
- 5. Including Catalog Components
- Example: Including a Catalog Component
- 6. Creating Component Templates
- Example: Component Template YAML
- Best Practices
- 7. Using Component Outputs
- Example: Using Artifacts to Pass Data Between Jobs
- Example: Using Reports to Store Test Results
- 8. Implementing Component Testing
- Example: Running Jest Tests in GitLab CI
- Example: Running Cypress Tests
- 9. Documenting Components
- Example: Component Metadata File
- Best Practices for Component Documentation
- 10. Managing Component Dependencies
- Example: Defining Component Dependencies in CI/CD
Optimizing Pipeline Performance
- 1. Using DAG Pipelines
- Example: DAG Pipeline Configuration
- 2. Implementing Parallel Execution
- Example: Basic Parallel Jobs
- Example: Parallel Test Jobs
- Best Practices for Parallel Execution
- 3. Optimizing Cache Usage
- Example: Using cache key with branch and commit
- Example: Cache with fallback key
- Cache Optimization Tips
- 4. Reducing Docker Image Size
- Example: Multi-stage Dockerfile
- 5. Using Interruptible Jobs
- Example: Enabling Interruptible Jobs
- 6. Skipping Unnecessary Jobs
- Example: Using
- Example: Using
- 7. Optimizing Artifact Size
- Example: Reducing Artifact Size
- 8. Using Resource Groups
- Example: Define a resource group in a job
- 9. Implementing Fail-Fast Strategies
- Example: Using
- Example: Using
- Best Practices for Fail-Fast
- 10. Monitoring Pipeline Duration
- Example: Fetching Pipeline Duration via API
- Key Metrics for Pipeline Duration Monitoring
Using GitLab CI/CD Advanced Features
- 1. Using Auto DevOps
- Example: Enabling Auto DevOps in
- Auto DevOps Capabilities
- 2. Configuring Release Management
- Example: Basic Release Configuration
- Example: Release with Assets
- 3. Using Feature Flags (FF_* variables)
- Example: Enabling a feature flag in a job
- 4. Implementing Compliance Pipelines
- Example: Security Scan Job
- Example: Compliance Job
- 5. Using Pipeline Subscriptions
- Example: Configuring a Webhook for Pipeline Events
- 6. Configuring Required Pipelines
- Example: Required Pipeline Configuration
- 7. Using Pipeline Artifacts
- Example: Basic Artifact Usage
- Example: Artifact with Exclusions
- 8. Implementing External Pull Policies
- Example: Configuring External Pull Policy
- 9. Using Pipeline Efficiency Analytics
- Example: Setting up Pipeline Efficiency Metrics
- Key Metrics for Pipeline Efficiency
- Pipeline Efficiency vs Manual Monitoring
- Steps to Implement Pipeline Efficiency Analytics
- 10. Using id_tokens for OIDC Authentication
- Example: Using id_token in a job
Managing GitLab Runner at Scale
- 1. Implementing Runner Autoscaling
- Example: Configure autoscaling with Kubernetes
- Key Considerations
- 2. Monitoring Runner Health
- Example: Check runner status via API
- Example: Monitor runner metrics with Prometheus
- Key Metrics to Monitor
- 3. Using Runner Fleet Management
- Example: Configure a GitLab Runner with Fleet Management
- Key Features of GitLab Runner Fleet Management
- 4. Configuring Runner Load Balancing
- Example: Configuring concurrent jobs
- Load Balancing Best Practices
- 5. Implementing Runner High Availability
- Example: Configuring HA runners with shared cache
- Runner HA vs Single Instance
- High Availability Runner Setup Steps
- 6. Using Runner Monitoring and Alerting
- Example: Configure runner monitoring with Prometheus
- Example: Set up alerting rules in Prometheus
- Runner Alerting Best Practices
- Runner Monitoring Tools
- 7. Optimizing Runner Resource Allocation
- Example: Configuring concurrent_jobs
- 8. Implementing Runner Cost Optimization
- Example: Configuring runner limits and resource constraints
- Example: Using tags to manage runner cost
- Runner Cost Optimization Strategies
- 9. Using Runner Capacity Planning
- Example: Configuring runner limits
- Capacity Planning Best Practices
- 10. Upgrading GitLab Runner
- Example: Upgrade GitLab Runner via Package Manager
Managing Compute Minutes and Costs
- 1. Understanding Compute Minutes Allocation
- Example: Compute Minutes Usage
- Key Points
- 2. Tracking Compute Usage
- Example: Pipeline with Timeout Configuration
- 3. Optimizing Job Duration
- Example: Parallel Jobs
- Example: Caching Dependencies
- 4. Using Cost Factors
- Example: Cost Factor Configuration
- 5. Implementing Resource Limits
- Example: Setting Resource Limits in .gitlab-ci.yml
- 6. Using Timeout Optimization
- Example: Setting Timeout in .gitlab-ci.yml
- 7. Reducing Unnecessary Pipelines
- Example: Using
- Example: Using
- Best Practices for Reducing Pipeline Costs
- 8. Implementing Cost Alerts
- Example: Setting up a cost alert in GitLab
- 9. Using Efficient Docker Images
- Example: Using Alpine-based image in GitLab CI
- 10. Monitoring Cost Trends
- Example: Cost Trend Query
Implementing Security Best Practices
- 1. Using Protected Branches
- Example: Protecting a Branch in GitLab CI/CD
- 2. Configuring Protected Tags
- Example: Protecting a Tag in .gitlab-ci.yml
- 3. Implementing Least Privilege for Runners
- Example: Project Runner Configuration
- 4. Using Masked Variables (masked: true)
- Example: Masked Variable in GitLab CI/CD
- 5. Rotating CI/CD Tokens Regularly
- Example: Rotating Job Token in CI/CD Pipeline
- 6. Implementing Secrets Management
- Example: Using GitLab CI Variables
- 7. Using Signed Commits Verification
- Example: Enabling commit signing in GitLab CI
- Verification Process
- 8. Configuring RBAC for Runners
- Example: Setting up RBAC for runners in GitLab
- 9. Implementing Audit Logging
- Example: Enabling Audit Logging in GitLab CI/CD
- 10. Using Security Policies
- Example: Enforcing Code Review Policy
Working with Compliance and Governance
- 1. Implementing Compliance Frameworks
- Example: GitLab CI/CD Compliance Configuration
- 2. Using Compliance Pipeline Configuration
- Example: Enabling Compliance Pipeline
- Example: Defining Compliance Rules
- 3. Configuring Separation of Duties
- Example: Setting up Separation of Duties
- 4. Implementing Approval Rules
- Example: Configuring Approval Rules in .gitlab-ci.yml
- 5. Using Audit Events
- Example: Audit Event Configuration
- 6. Configuring License Compliance
- Example: License Compliance Configuration
- 7. Implementing Security Policies
- Example: Security Scanning Configuration
- Example: Compliance Check Configuration
- 8. Using Compliance Dashboards
- Example: Setting up a compliance dashboard in GitLab
- Key Features of Compliance Dashboards
- 9. Configuring External Status Checks
- Example: Enable External Status Checks
- 10. Implementing Change Management Controls
- Example: Enforcing Branch Protection
- Example: Setting Merge Request Approvals
Monitoring and Analyzing Pipelines
- 1. Using Pipeline Analytics
- Example: Accessing Pipeline Analytics in GitLab
- Key Features of Pipeline Analytics
- 2. Tracking Pipeline Duration
- Example: Pipeline Duration in GitLab CI/CD
- 3. Identifying Pipeline Bottlenecks
- Example: Analyzing Job Duration Logs
- 4. Using Value Stream Analytics
- Example: Setting up Value Stream Analytics
- Key Features of Value Stream Analytics
- 5. Implementing Pipeline Success Rate Tracking
- Example: Pipeline Metrics in GitLab CI/CD
- Tracking Pipeline Success Rate
- 6. Monitoring Runner Queue Times
- Example: Calculating Queue Time
- 7. Using DORA Metrics
- Example: Setting up DORA Metrics in GitLab CI
- 8. Tracking Pipeline Costs
- Example: Pipeline Duration in API Response
- Cost Tracking Best Practices
- 9. Optimizing Pipeline Schedules
- Example: Schedule Configuration
- Optimization Tips
- 10. Using Pipeline Insights API
- Example: Fetching Pipeline Metrics
- Key Features of Pipeline Insights API
Handling Errors and Debugging
- 1. Using allow_failure for Non-Critical Jobs
- Example: Using allow_failure in a job
- 2. Debugging with CI_DEBUG_TRACE
- Example: Enabling Debug Trace
- 3. Viewing Job Logs
- Example: Accessing Job Logs via GitLab UI
- Log Debugging Tips
- 4. Using echo for Debug Output
- Example: Basic echo usage in a GitLab CI job
- Best Practices for Debugging with echo
- 5. Handling Script Failures
- Example: Handling Script Failures
- 6. Retrying Failed Jobs
- Example: Retry configuration in .gitlab-ci.yml
- 7. Using when:on_failure Jobs
- Example: Defining a job that runs on failure
- 8. Debugging Variable Expansion
- Example: Using Variables in Scripts
- 9. Validating YAML Syntax
- Example: Basic YAML Validation
- Validation Tips
- 10. Using Job Artifacts for Debugging
- Example: Configuring Artifacts in a Job
- Key Points
Troubleshooting Common Issues
- 1. Resolving Runner Connection Issues
- Example: Re-registering a GitLab Runner
- 2. Fixing Docker Authentication Errors
- Example: Setting up Docker registry credentials in GitLab CI
- 3. Debugging Cache Miss Issues
- Example: Cache Key Configuration
- 4. Resolving Artifact Download Failures
- Example: Artifact Upload and Download Configuration
- 5. Fixing YAML Syntax Errors
- Example: Correct YAML Syntax
- Example: Incorrect YAML Syntax
- 6. Debugging Variable Expansion Issues
- Example: Variable Expansion in Script
- Common Expansion Issues
- 7. Resolving Permission Denied Errors
- Example: Setting up SSH Keys for GitLab CI
- Common Permission Issues
- 8. Fixing Timeout Issues
- Example: Setting Job Timeout
- Example: Configuring Runner Timeout
- 9. Debugging Merge Conflict Failures
- Example: Resolving Merge Conflicts Locally
- 10. Resolving Resource Exhaustion
- Example: Limiting Concurrent Jobs
- Example: Setting Cache Limits