Вводная часть
Основано на статье "Руководство по CI/CD в GitLab для (почти) абсолютного новичка".
В статье GitLab CI/CD данного руководства мы уже обсуждали GitLab CI. Давайте применим полученные знания для реализации собственного конвейера в нашем проекте.
Кратко опишем процесс, который обычно реализуется конвейер в GitLab CI:
- разработчик отправляет коммит в репозиторий, создаёт merge request через сайт, или ещё каким-либо образом явно или неявно запускает конвейер;
- из конфигурации выбираются все задачи, условия которых позволяют их запустить в данном контексте;
- задачи организуются в соответствии со своими этапами;
- этапы по очереди выполняются - т.е. параллельно выполняются все задачи этого этапа:
- если этап завершается неудачей (т.е. завершается неудачей хотя бы одна из задач этапа) - конвейер останавливается (почти всегда);
- если все этапы завершены успешно, конвейер считается успешно прошедшим.
Таким образом, имеем:
- конвейер (pipeline) - набор задач, организованных в этапы, в котором можно собрать, протестировать, упаковать код, развернуть готовую сборку в облачный сервис, и пр.;
- этап (stage) - единица организации конвейера, содержит 1+ задачу;
- задача (job) — единица работы в конвейера. Состоит из скрипта (обязательно), условий запуска, настроек публикации/кеширования артефактов и много другого.
Соответственно, задача при настройке CI/CD сводится к тому, чтобы создать набор задач, реализующих все необходимые действия для сборки, тестирования и публикации кода и артефактов.
Исходная позиция
Имеем:
- репозиторий в GitLab.
Хотим:
- Автоматическую сборку и тестирование для каждого merge request;
- Помимо тестирования провести статический анализ кода;
- В случае прохождения всех тестов, разрешить слияние. В противном случае заблокировать слияние.
- В случае успешного мерджа в ветку по умолчанию, собрать бинарники программы и публиковать их в релизах.
Описанные требования органично ложатся на следующую модель конвейера:
-
Этап 1 — тестирование
Проводим статический анализ кода и тестируем его.
-
Этап 2 - сборка бинарников
В случае успешного мерджа в ветку соберем бинарники и опубликуем их в артефактах.
-
Этап 3 - подготовка релиза
Подготавливаем красивый релиз с прикрепленными бинарниками.
Про этапы и задачи мы обсуждали в статье GitLab CI/CD данного руководства.