Перейти к основному содержимому

Вводная часть

В статье GitLab CI/CD данного руководства мы уже обсуждали GitLab CI. Давайте применим полученные знания для реализации собственного конвейера в нашем проекте.

Кратко опишем процесс, который обычно реализуется конвейер в GitLab CI:

  • разработчик отправляет коммит в репозиторий, создаёт merge request через сайт, или ещё каким-либо образом явно или неявно запускает конвейер;
  • из конфигурации выбираются все задачи, условия которых позволяют их запустить в данном контексте;
  • задачи организуются в соответствии со своими этапами;
  • этапы по очереди выполняются - т.е. параллельно выполняются все задачи этого этапа:
    • если этап завершается неудачей (т.е. завершается неудачей хотя бы одна из задач этапа) - конвейер останавливается (почти всегда);
    • если все этапы завершены успешно, конвейер считается успешно прошедшим.

Таким образом, имеем:

  • конвейер (pipeline) - набор задач, организованных в этапы, в котором можно собрать, протестировать, упаковать код, развернуть готовую сборку в облачный сервис, и пр.;
  • этап (stage) - единица организации конвейера, содержит 1+ задачу;
  • задача (job) — единица работы в конвейера. Состоит из скрипта (обязательно), условий запуска, настроек публикации/кеширования артефактов и много другого.

Соответственно, задача при настройке CI/CD сводится к тому, чтобы создать набор задач, реализующих все необходимые действия для сборки, тестирования и публикации кода и артефактов.

Исходная позиция

Имеем:

  • репозиторий в GitLab.

Хотим:

  • Автоматическую сборку и тестирование для каждого merge request;
  • Помимо тестирования провести статический анализ кода;
  • В случае прохождения всех тестов, разрешить слияние. В противном случае заблокировать слияние.
  • В случае успешного мерджа в ветку по умолчанию, собрать бинарники программы и публиковать их в релизах.

Описанные требования органично ложатся на следующую модель конвейера:

  • Этап 1 — тестирование

    Проводим статический анализ кода и тестируем его.

  • Этап 2 - сборка бинарников

    В случае успешного мерджа в ветку соберем бинарники и опубликуем их в артефактах.

  • Этап 3 - подготовка релиза

    Подготавливаем красивый релиз с прикрепленными бинарниками.

к сведению

Про этапы и задачи мы обсуждали в статье GitLab CI/CD данного руководства.