GitLab CI/CD — это встроенная система автоматизации в платформу GitLab, обеспечивающая полный контроль над жизненным циклом разработки: от коммита и тестирования до сборки, деплоя и мониторинга. Конфигурация происходит через файл .gitlab-ci.yml, который хранится в репозитории и определяет поведение пайплайна как код.
Что делает GitLab CI/CD
- Запускает тесты и сборки при каждом пуше или pull/merge request;
- Выполняет деплой на staging и production автоматически или по триггеру;
- Контролирует состояние пайплайна в реальном времени — с логами, статусами, графами;
- Интегрируется с внешними сервисами и инструментами: Docker, Kubernetes, Helm, Terraform, Slack, Prometheus, Sentry и др.;
- Поддерживает DevSecOps — встроенные сканеры SAST, DAST, Dependency Scanning, Container Scanning, License Compliance;
- Автоматически генерирует пайплайн в проектах с поддерживаемыми языками (Node.js, Python, Java и др.).
Основные компоненты GitLab CI
| Компонент | Описание |
|---|---|
| Stages | Последовательные этапы: build, test, deploy, review, cleanup |
| Jobs | Конкретные задачи в рамках этапа (например, run unit tests) |
| Runners | Исполнители задач (shared или custom, docker, shell, Kubernetes) |
| Triggers | Механизмы запуска пайплайна вручную, по расписанию или через API |
| Artifacts | Файлы, передающиеся между задачами или сохраняемые для загрузки |
| Environments | Переменные среды и управление rollout’ами на stage/prod |
Пример базового .gitlab-ci.yml
stages:
- test
- build
- deploy
test:
stage: test
image: node:20
script:
- npm ci
- npm run test
build:
stage: build
image: docker:latest
services:
- docker:dind
script:
- docker build -t registry.gitlab.com/mygroup/app:$CI_COMMIT_SHORT_SHA .
- docker push registry.gitlab.com/mygroup/app:$CI_COMMIT_SHORT_SHA
deploy:
stage: deploy
script:
- helm upgrade --install app ./helm \
--set image.tag=$CI_COMMIT_SHORT_SHA \
--namespace production
only:
- main
📌 Этот пайплайн: запускает тесты, билдит Docker-образ и деплоит через Helm.
Преимущества GitLab CI/CD
- Единая платформа: код, ревью, CI/CD, безопасность — всё в одном месте;
- Pipeline-as-Code: вся логика хранится и версионируется рядом с кодом проекта;
- Универсальность: от простых скриптов до сложных многоконтурных пайплайнов;
- Безопасность по умолчанию: встроенные инструменты DevSecOps без необходимости настройки с нуля;
- Гибкая кастомизация: условия запуска (
rules,only/except), переменные, матричные сборки, dynamic child pipelines и многое другое.
Поддержка DevOps/DevSecOps
- SAST, DAST, Container Scanning, License Compliance — включаются одной строкой;
- Scan results → MR Widget — предупреждения отображаются прямо в merge request;
- Security Dashboard — сводная аналитика уязвимостей по всем проектам;
- Policies и approvals — настраиваются для продакшн-окружений и безопасности кода.
GitLab CI/CD — это не просто CI-инструмент, а интегрированная DevOps-платформа, которая позволяет командам автоматизировать и стандартизировать процессы от разработки до доставки и безопасности.
Вот практическое продолжение — готовые шаблоны и конфигурации для GitLab CI/CD, которые можно адаптировать под любой проект:
Пример: .gitlab-ci.yml с multi-stage pipeline, Docker, Helm, и SAST
stages:
- lint
- test
- build
- security
- deploy
variables:
IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
lint:
stage: lint
image: node:20
script:
- npm ci
- npm run lint
test:
stage: test
image: node:20
script:
- npm run test:ci
build:
stage: build
image: docker:20
services:
- docker:dind
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $IMAGE_TAG .
- docker push $IMAGE_TAG
security-sast:
stage: security
image: docker:20
allow_failure: true
script:
- docker run --rm -v $(pwd):/src returntocorp/semgrep --config=auto
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
deploy-prod:
stage: deploy
image: alpine/k8s:1.27.4
script:
- helm upgrade --install app ./helm \
--namespace production \
--set image.repository=$CI_REGISTRY_IMAGE \
--set image.tag=$CI_COMMIT_SHORT_SHA
only:
- main
Пример для dynamic review apps (merge requests)
review:
stage: deploy
environment:
name: review/$CI_COMMIT_REF_NAME
url: https://$CI_COMMIT_REF_SLUG.example.com
script:
- helm upgrade --install app-$CI_COMMIT_REF_SLUG ./helm \
--namespace review \
--set image.tag=$CI_COMMIT_SHORT_SHA \
--set ingress.host=$CI_COMMIT_REF_SLUG.example.com
only:
- merge_requests
📌 Это создаёт временное окружение на каждый merge request.
GitLab Runner: запуск в Docker (standalone)
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
Затем регистрируешь:
docker exec -it gitlab-runner gitlab-runner register