Если у вас в проекте Dockerfile
, Makefile
, docker-compose.yml
, shell-скрипты, да ещё всё это дёргается в gitlab-ci.yml
, то можно из этой схемы немножко повыкидывать лишнее. Поможет в этом Gitlab Runner, который на удивление просто установить и использовать. В общем, скачиваем бинарник, и установка закончена. Вот она, мощь Go.
Выполнить job (дальше буду задачей называть) без изоляции, в текущем окружении, с игнорированием image
и прочиъ докеровских штучек (flake8
в примере — имя задачи):
gitlab-runner exec shell flake8
Выполнить job внутри docker’а, используя image
, services
, вот это вот всё:
sudo gitlab-runner exec docker --docker-privileged flake8
Многие фичи недоступны, рекомендую почитать Limitations of gitlab-runner exec. Главное, что выполняется только одна задача, без предыдущих, соседних, вот этого всего. А ещё артифакты не сохраняются. В общем, есть issue gitlab-runner exec usability improvements, в нём 2 года обсуждают, как всё это сильно улучшить, но пока что как есть.
Если нужно добавить какие-то задачи, которые не должны исполняться на CI, можно указать в их конфиге when: manual
. Преимущество перед make в том, что можно не только из консоли запускать, но и через интерфейс Gitlab прям со страницы PR’а.
Вообще, преимуществ, по сравнению с make, довольно много: MIT лицензия, лёгкая установка, активная разработка, красивый и понятный конфиг, написан на Go, нету десятка разных диалектов. Так что если описанные ограничения для проекта не актуальны — do it!