GitLab CI/CD
GitLab CI/CD is a tool built into GitLab for software development through the continuous methodologies:
- Continuous Integration (CI)
- Continuous Delivery (CD)
- Continuous Deployment (CD)
Continuous Integration works by pushing small code chunks to your application’s codebase hosted in a Git repository, and to every push, run a pipeline of scripts to build, test, and validate the code changes before merging them into the main branch.
Continuous Delivery and Deployment consist of a step further CI, deploying your application to production at every push to the default branch of the repository.
These methodologies allow you to catch bugs and errors early in the development cycle, ensuring that all the code deployed to production complies with the code standards you established for your app.
GitLab can also automatically detect, build, test, deploy, and monitor your applications by using Auto DevOps.
For a complete overview of these methodologies and GitLab CI/CD, read the Introduction to CI/CD with GitLab.
Concepts
GitLab CI/CD uses a number of concepts to describe and run your build and deploy.
Concept | Description |
---|---|
Pipelines | Structure your CI/CD process through pipelines. |
CI/CD variables | Reuse values based on a variable/value key pair. |
Environments | Deploy your application to different environments (e.g., staging, production). |
Job artifacts | Output, use, and reuse job artifacts. |
Cache dependencies | Cache your dependencies for a faster execution. |
GitLab Runner | Configure your own runners to execute your scripts. |
Pipeline efficiency | Configure your pipelines to run quickly and efficiently. |
Test cases | Configure your pipelines to run quickly and efficiently. |
Configuration
GitLab CI/CD supports numerous configuration options:
Configuration | Description |
---|---|
Schedule pipelines | Schedule pipelines to run as often as you need. |
Custom path for .gitlab-ci.yml
| Define a custom path for the CI/CD configuration file. |
Git submodules for CI/CD | Configure jobs for using Git submodules. |
SSH keys for CI/CD | Using SSH keys in your CI pipelines. |
Pipeline triggers | Trigger pipelines through the API. |
Pipelines for Merge Requests | Design a pipeline structure for running a pipeline in merge requests. |
Integrate with Kubernetes clusters | Connect your project to Google Kubernetes Engine (GKE) or an existing Kubernetes cluster. |
Optimize GitLab and GitLab Runner for large repositories | Recommended strategies for handling large repositories. |
.gitlab-ci.yml full reference
| All the attributes you can use with GitLab CI/CD. |
Note that certain operations can only be performed according to the user and job permissions.
Feature set
Use the vast GitLab CI/CD to easily configure it for specific purposes. Its feature set is listed on the table below according to DevOps stages.
Feature | Description |
---|---|
Configure | |
Auto DevOps | Set up your app’s entire lifecycle. |
ChatOps | Trigger CI jobs from chat, with results sent back to the channel. |
Verify | |
Browser Performance Testing | Quickly determine the browser performance impact of pending code changes. |
Load Performance Testing | Quickly determine the server performance impact of pending code changes. |
CI services | Link Docker containers with your base image. |
Code Quality | Analyze your source code quality. |
GitLab CI/CD for external repositories | Get the benefits of GitLab CI/CD combined with repositories in GitHub and Bitbucket Cloud. |
Interactive Web Terminals | Open an interactive web terminal to debug the running jobs. |
Unit test reports | Identify script failures directly on merge requests. |
Using Docker images | Use GitLab and GitLab Runner with Docker to build and test applications. |
Release | |
Auto Deploy | Deploy your application to a production environment in a Kubernetes cluster. |
Building Docker images | Maintain Docker-based projects using GitLab CI/CD. |
Canary Deployments | Ship features to only a portion of your pods and let a percentage of your user base to visit the temporarily deployed feature. |
Deploy Boards | Check the current health and status of each CI/CD environment running on Kubernetes. |
Feature Flags | Deploy your features behind Feature Flags. |
GitLab Pages | Deploy static websites. |
GitLab Releases | Add release notes to Git tags. |
Review Apps | Configure GitLab CI/CD to preview code changes. |
Cloud deployment | Deploy your application to a main cloud provider. |
Secure | |
Container Scanning | Check your Docker containers for known vulnerabilities. |
Dependency Scanning | Analyze your dependencies for known vulnerabilities. |
License Compliance | Search your project dependencies for their licenses. |
Security Test reports | Check for app vulnerabilities. |
Examples
Find example project code and tutorials for using GitLab CI/CD with a variety of app frameworks, languages, and platforms on the CI Examples page.
Administration
As a GitLab administrator, you can change the default behavior of GitLab CI/CD for:
- An entire GitLab instance.
- Specific projects, using pipelines settings.
See also:
References
Why GitLab CI/CD?
Learn more about:
- Why you might chose GitLab CI/CD.
- Reasons you might migrate from another platform.
- 5 Teams that made the switch to GitLab CI/CD
See also the Why CI/CD? presentation.
Breaking changes
As GitLab CI/CD has evolved, certain breaking changes have been necessary. These are:
13.0
-
Remove Backported
os.Expand
. - Remove Fedora 29 package support.
- Remove macOS 32-bit support.
-
Removed
debug/jobs/list?v=1
endpoint. - Remove support for array of strings when defining services for Docker executor.
-
Remove
--docker-services
flag on register command. - Remove legacy build directory caching.
-
Remove
FF_USE_LEGACY_VOLUMES_MOUNTING_ORDER
feature flag. - Remove support for Windows Server 1803.
12.0
-
Use
refspec
to clone/fetch Git repository. - Old cache configuration.
- Old metrics server configuration.
-
Remove
FF_K8S_USE_ENTRYPOINT_OVER_COMMAND
. - Remove Linux distributions that reach EOL.
- Update command line API for helper images.
-
Remove old
git clean
flow.
11.0
- No breaking changes.
10.0
- No breaking changes.