Ответ
В моей практике GitLab Workflow — это не просто «ветка + MR», а полноценный, автоматизированный цикл доставки, построенный вокруг возможностей GitLab CI/CD. Я настраивал его следующим образом:
Ядро процесса — Merge Request (MR):
- Разработчик создает ветку от
mainдля задачи (например,feature/new-payment). - Каждый пуш в эту ветку автоматически запускает CI/CD пайплайн, который выполняет:
- Lint & Test: Проверку кода, юнит-тесты.
- Build & Security Scan: Сборку Docker-образа и его сканирование на уязвимости (Trivy).
- Deploy to Review: Автоматический деплой изменений в изолированное, ephemeral review-окружение. Это позволяет тестировать фичу в условиях, близких к production, без влияния на других.
- Создается MR. В описании автоматически подтягиваются результаты пайплайна и security-сканов.
- После аппрува ревьюерами и успешного прохождения всех этапов пайплайна MR мержится в
main.
Что происходит после мержа в main:
Автоматически запускается продвинутый пайплайн, который:
- Деплоит образ в staging-окружение.
- Запускает интеграционные и нагрузочные тесты.
- После успеха и, опционально, ручного подтверждения — разворачивает изменения в production (часто с использованием стратегий blue-green через ArgoCD, который синхронизирован с GitLab).
Пример .gitlab-ci.yml, реализующего этот workflow:
stages:
- test
- build
- deploy-review
- deploy-staging
- deploy-prod
# Этап для каждой фич-ветки
build:image:
stage: build
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
only:
- merge_requests
- main
deploy:review:
stage: deploy-review
script:
- helm upgrade --install my-app-$CI_COMMIT_REF_SLUG ./chart --set image.tag=$CI_COMMIT_REF_SLUG
environment:
name: review/$CI_COMMIT_REF_SLUG
url: https://$CI_COMMIT_REF_SLUG.my-app.com
on_stop: stop_review # Автоматически удаляет окружение при закрытии MR
only:
- merge_requests
# Этап, срабатывающий только после мержа в main
deploy:staging:
stage: deploy-staging
script: [...]
only:
- main
Такой workflow обеспечивает высокую скорость, безопасность и предсказуемость доставки изменений.