GitLab CI/CD (Непрерывная интеграция и доставка в GitLab)

⌘K

GitLab CI/CD (Непрерывная интеграция и доставка в GitLab)

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

Даже в глоссарии есть повод сэкономить

Дарим 1 месяц к году оплаты VPS. Код: NEWCOM

Месяц в подарок
COPIED
NEWCOM COPIED