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
.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
), переменные, матричные сборки, dynamic child pipelines и многое другое.only/except
Поддержка 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
.gitlab-ci.yml
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