Сегодня поговорим про Gitlab и посмотрим простой прием с переменными (variables) и вводом (input).
Они начали использоваться начиная с 17.0 версии, уже 10 версий прошло, кажется можно и обсудить. Не забудьте, что на более старых версиях может вообще не работать. в т.ч проверяйте версию раннера.
Как работать с переменными должно быть всем понятно, но у них есть несколько проблем и сложностей. Сегодня рассмотрим как просто поменять Variable на Inputs и как можно расширить возможности вашего пайплайна:
📌Простой пример как использовать переменные в job в Вашем gitlab-ci:
variables:
versions:
value: "1.0"
options:
- "0.1"
- "1.0"
- "2.1"
description: "tag name"
Удобная схема, которая позволит иметь дефолтное значение, и при ручном запуске можно переопределить значение из выпадающего списка.
📌Так как это действительно удобно, сделаем тоже самое с inputs
spec:
inputs:
versions:
options: ['0.1', '1.0', '2.1']
default: '1.0'
description: 'tag name'
Работает точно также. Только для использования нужно использовать
$[[ inputs.versions ]] вместо $versionsВозможно, выглядит может чуть сложнее, но с большей сложностью приходят новые возможности.
⏩Одну из них сегодня разберем.
С помощью переменных, я могу сделать огромный список разных вариантов переменных, сочетание которых, будет делать то, что нужно. Но мне хочется больше.
С помощью inputs можно создавать условие отображения возможных вариантов переменных. То есть, выбрав одну переменную, сделать возможным отображение вариантов или условий соответствующих только для нее.
Попробуем это сделать:
spec:
inputs:
run_playbook: # Например я хочу выбирать значение для опредленного плейбука
options: ['', 'nginx', 'k8s', 'postgres']
default: ''
description: 'Playbook to run'
environment: # Возможно значение будет зависеть от окружения
options: ['development', 'staging', 'production']
default: 'development'
description: 'Your environment'
playbook: # Вот и основное значение, допустим это имя плейбука или нужная ему переменная
description: 'Install'
rules: # Пишем привычные правила, указывая условия. варианты будут доступны только при выполнении условий
- if: $[[ inputs.run_playbook ]] == 'nginx' && $[[ inputs.environment ]] == 'development'
options: ['my_lb', 'your_lb']
default: 'my_lb'
- if: $[[ inputs.run_playbook ]] == 'nginx' && $[[ inputs.environment ]] == 'production'
options: ['prod01', 'prod02', 'prod03']
default: 'prod01'
- if: $[[ inputs.run_playbook ]] == 'k8s'
options: ['common-test', 'common-dev', 'common-prod']
default: 'common-test'
- if: $[[ inputs.run_playbook ]] == 'postgres'
options: ['base01', 'base02', 'base03']
default: 'base01'
- options: ['']
default: '' # Пока не выбрано - будет пустое значение
Попробуйте использовать в ваших пайплайнах, а если вам будет полезно, разберем и другие варианты использования 🔥
