Из коробки, когда ты жмешь кнопку 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 с одинаковым содержимым, все инклудится из одного места. Ну и если нужно что-то поменять, меняем один раз и все проекты автоматически это подхватывают.
Максимально попытался упростить и сделать наглядно, а дальше уже включай фантазию и твори.
Хорошего тебе дня, увидимся!
tags: #devops
@ВАSНDАYS | BАSHDАYS.CОM