Сегодня за DevOps, GitLab и как сделать комфортный pipeline с выпадающими списками Variables + бонусы.
Из коробки, когда ты жмёшь кнопку Run Pipeline, тебе нужно руками вбивать нужные Variables, например, чтобы указать окружение, в которое будет раскатан релиз.
Каждый раз вбивать руками Variable ENVIRONMENT=stage / production — ну пиздец тяжко и неудобно. А если таких переменных овердохуя, то всё желание пропадает что-то делать.
Хочется, чтобы был выпадающий список со всеми параметрами. Накликал мышкой — и в продакшен.
Выпадающие списки можно делать не только с окружениями, но и добавить банальные вопросы YES/NO и прочее. А затем в секции rules уже всё это разруливать и обрабатывать.
Ниже базовая болванка
Создаём файл .gitlab-ci.yml в корне проекта и добавляем в него:
variables:
ENVIRONMENT:
value: "N/A"
options:
- "N/A"
- "STAGE"
- "PRODUCTION"
description: "Deployment environment"
.stage_server:
&stage_server
WEB_NODE: "xx.xx.xx.xx"
DB_NODE: "xx.xx.xx.xx"
.production_server:
&production_server
WEB_NODE: "xx.xx.xx.xx"
DB_NODE: "xx.xx.xx.xx"
deploy:
tags:
- common-runner
script:
- echo $ENVIRONMENT
- echo "build & deploy here"
rules:
- if: '$ENVIRONMENT == "STAGE"'
variables:
<<: *stage_server
- if: '$ENVIRONMENT == "PRODUCTION"'
variables:
<<: *production_server
В первой секции variables описываем выпадающий список. Из него будем выбирать мышкой, куда деплоить.
N/A — выбран по умолчанию — добавлено для дураков, которые ничего не выбирают и сразу тыкают Run Pipeline. В таком случае пайплайн зафейлится и ничего не пострадает.
Дальше идут две секции, которые описывают окружения stage и production, там указываем айпишники и вообще всё, что захотим для каждого окружения. Можно флагов навтыкать и прочего говна.
Ну и основная секция deploy: у меня указан раннер с тегом common-runner, а потом полезная нагрузка, которая будет выполнена.
В секции rules зашита логика. В зависимости от того, какое окружение было выбрано из выпадающего списка, применяются настройки либо от stage, либо от production. Короче, инклудится нужное.
Собственно, всё. Если нужно добавить ещё каких-то выпадающих списков, добавляем в первую секцию всё необходимое, аналогично ENVIRONMENT. Ну и потом в rules всё это обрабатываем. Например, так:
- if: '$JOB == "YES" && $ENVIRONMENT == "STAGE"'
В общем, всё элементарно. По итогу получаем незамысловатый пайплайн, всё в одном месте и ничего не раскидано по самому GitLab.
Бонусы
Да, если нужен общий пайплайн для нескольких проектов, делаем так.
Создаём репу dev/pipelines, кидаем туда файл .gitlab-ci.yml, настраиваем в нём всё под свои реалии.
Дальше в нужных проектах добавляем файл .gitlab-ci.yml с таким содержимым:
include:
- project: "dev/pipelines"
file: ".gitlab-ci.yml"
.gitlab-ci.yml с одинаковым содержимым: всё инклудится из одного места.Ну и если нужно что-то поменять, меняем один раз, и все проекты автоматически это подхватывают.
Максимально попытался упростить и сделать наглядно, а дальше уже включай фантазию и твори.
Хорошего тебе дня, увидимся!








Комментарии
Виджет комментариев загружается с серверов Telegram и может использовать cookies. Разрешите внешние сервисы, чтобы открыть обсуждение.