Что такое GitLab CI/CD?

GitLab CI/CD — это встроенная система непрерывной интеграции и развертывания в платформе GitLab. Она позволяет автоматизировать весь жизненный цикл разработки от коммита до продакшена без необходимости в сторонних инструментах.

Основные возможности GitLab CI/CD

  • Интегрированность — встроена прямо в GitLab
  • Pipeline as Code — конфигурация через .gitlab-ci.yml
  • Multi-platform runners — поддержка различных ОС
  • Container Registry — встроенный Docker registry
  • Security scanning — автоматическое сканирование безопасности
  • Auto DevOps — автоматическая настройка пайплайнов
  • Review Apps — автоматические окружения для ревью

Создание .gitlab-ci.yml

 1# .gitlab-ci.yml
 2stages:
 3  - build
 4  - test
 5  - deploy
 6
 7variables:
 8  DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
 9
10build:
11  stage: build
12  image: docker:latest
13  services:
14    - docker:dind
15  script:
16    - docker build -t $DOCKER_IMAGE .
17    - docker push $DOCKER_IMAGE
18  only:
19    - main
20    - merge_requests
21
22test:
23  stage: test
24  image: python:3.9
25  script:
26    - pip install -r requirements.txt
27    - pytest tests/
28  coverage: '/TOTAL.*\s+(\d+%)$/'
29  artifacts:
30    reports:
31      coverage_report:
32        coverage_format: cobertura
33        path: coverage.xml
34
35deploy_staging:
36  stage: deploy
37  image: alpine:latest
38  script:
39    - apk add --no-cache curl
40    - curl -X POST "$STAGING_WEBHOOK_URL"
41  environment:
42    name: staging
43    url: https://staging.example.com
44  only:
45    - main
46
47deploy_production:
48  stage: deploy
49  image: alpine:latest
50  script:
51    - curl -X POST "$PRODUCTION_WEBHOOK_URL"
52  environment:
53    name: production
54    url: https://example.com
55  when: manual
56  only:
57    - main

GitLab Runners

 1# Установка GitLab Runner
 2curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
 3sudo apt-get install gitlab-runner
 4
 5# Регистрация runner'а
 6sudo gitlab-runner register \
 7  --url "https://gitlab.com/" \
 8  --registration-token "YOUR_TOKEN" \
 9  --description "docker-runner" \
10  --executor "docker" \
11  --docker-image alpine:latest
12
13# Установка через Docker
14docker run -d --name gitlab-runner --restart always \
15  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
16  -v /var/run/docker.sock:/var/run/docker.sock \
17  gitlab/gitlab-runner:latest

Использование Docker в пайплайнах

 1# Пример с Docker-in-Docker
 2build_image:
 3  stage: build
 4  image: docker:latest
 5  services:
 6    - docker:dind
 7  variables:
 8    DOCKER_TLS_CERTDIR: "/certs"
 9  before_script:
10    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
11  script:
12    - docker build -t $CI_REGISTRY_IMAGE/app:$CI_COMMIT_SHA .
13    - docker push $CI_REGISTRY_IMAGE/app:$CI_COMMIT_SHA
14
15# Пример с готовым образом
16test_python:
17  stage: test
18  image: python:3.9
19  cache:
20    paths:
21      - .cache/pip
22      - venv/
23  before_script:
24    - python -m venv venv
25    - source venv/bin/activate
26    - pip install --cache-dir .cache/pip -r requirements.txt
27  script:
28    - pytest --junitxml=report.xml --cov=app tests/
29  artifacts:
30    when: always
31    reports:
32      junit: report.xml

Когда использовать GitLab CI/CD

  • Используешь GitLab как основную платформу разработки
  • Нужна интегрированная экосистема DevOps инструментов
  • Важна безопасность и compliance
  • Требуется встроенное сканирование безопасности
  • Нужны Review Apps для тестирования
  • Команда предпочитает единую платформу

Преимущества GitLab CI/CD

  • Интеграция — все в одной платформе
  • Security by default — встроенное сканирование
  • Простота настройки — минимальная конфигурация
  • Масштабируемость — от малых команд до enterprise
  • Compliance — соответствие стандартам безопасности
  • Cost-effective — включено в GitLab подписку

Auto DevOps

 1# Включение Auto DevOps (минимальная конфигурация)
 2include:
 3  - template: Auto-DevOps.gitlab-ci.yml
 4
 5variables:
 6  POSTGRES_ENABLED: "true"
 7  POSTGRES_VERSION: "13"
 8  AUTO_DEPLOY_ENABLED: "true"
 9
10# Кастомизация Auto DevOps
11build:
12  extends: .auto-build
13  before_script:
14    - echo "Custom build preparation"
15
16test:
17  extends: .auto-test
18  variables:
19    ADDITIONAL_TEST_FLAGS: "--verbose"

Security и Compliance

  • SAST — Static Application Security Testing
  • DAST — Dynamic Application Security Testing
  • Container Scanning — сканирование Docker образов
  • Dependency Scanning — проверка зависимостей
  • License Compliance — проверка лицензий
  • Secret Detection — поиск секретов в коде

Альтернативы GitLab CI/CD

  • GitHub Actions — для проектов на GitHub
  • Jenkins — для complex enterprise setup
  • Azure Pipelines — в экосистеме Microsoft
  • CircleCI — cloud-native решение
  • TeamCity — от JetBrains

Рекомендации по внедрению

  • Начни с Auto DevOps для быстрого старта
  • Настрой собственные runners для производительности
  • Используй кеширование для ускорения сборок
  • Настрой правильные environment и deployment стратегии
  • Включи security scanning с первого дня
  • Мониторь метрики пайплайнов

FAQ

Подходит ли GitLab CI/CD для продакшена?

Да, GitLab CI/CD широко используется в production средах и зарекомендовал себя как надежное решение. Используется компаниями как Siemens, Goldman Sachs, NASA.

Какие требования к инфраструктуре?

Для GitLab.com runners требований нет. Для собственных runners — зависит от нагрузки, но минимально достаточно 1 CPU и 2GB RAM.

Можно ли мигрировать с Jenkins на GitLab CI/CD?

Да, есть инструменты для миграции Jenkinsfile в .gitlab-ci.yml. Процесс обычно требует адаптации специфичных плагинов.