Практическое задание

Эта задача — шаг 11 курса «CI/CD: пайплайны и docker compose»

Ручной деплой в production

средне~20 мин

В проекте app (клон в /root/app, вход в веб — на вкладке «GitLab») пайплайн собирает релиз (джоба build) и тестирует его (test). Не хватает деплоя: скрипт deploy.sh готов, но в CI его нет.

Добавь в .gitlab-ci.yml этап deploy после test и на нём джобу deploy, которая запускает ./deploy.sh и деплоит в окружение production. Сама она запускаться не должна: в production выкатывают вручную, кнопкой, когда сборка и тесты прошли.

Запушь в main, дождись сборки и тестов и запусти деплой сам — из веб-интерфейса GitLab. Сборку, тесты и скрипты не меняй.

Что потренируешь:
  • GitLab CI
  • when: manual
  • environments
  • деплой

Разбор темы

Не всё в пайплайне стоит запускать автоматически: выкатку в production часто оставляют человеку. Джоба с when: manual попадает в пайплайн, но ждёт, пока её запустят кнопкой; пайплайн при этом считается пройденным. Ключ environment связывает джобу с окружением: GitLab запоминает каждый деплой — какой коммит, кем и когда выкачен — и показывает историю в Operate → Environments, откуда же можно откатиться на прошлый деплой.

Что проверяется

  1. Последний пайплайн на main — зелёный
  2. Сборка и тесты прошли
  3. Ручная джоба deploy запущена и прошла
  4. В окружении production — успешный деплой последнего коммита
  5. Релиз выкачен в /srv/production
  6. Скрипты сборки, тестов и деплоя не изменены

Как это выглядит