Что такое 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. Процесс обычно требует адаптации специфичных плагинов.