gitlab ci: Запустите сборку задания вручную или только в режиме мастера
Возможно ли, чтобы файл gitlab-ci выполнял задание на сборку, определяемое следующими требованиями:
- выполняться при ручном ИЛИ
- получить исполнение путем нажатия мастера
Я думал о чем-то подобном, но это плохо ложно:
build_jar:
stage: build
script:
- echo "build jar"
artifacts:
paths:
- jar/path/*.jar
only:
- master
when: manual
Единственное решение для меня состоит в том, чтобы иметь два задания: одно для основного нажатия и один ручной ввод. Но недостатком является то, что в gitlab он становится смущенным
Ответы
Ответ 1
Я также не нашел способа сделать это в одном блоке, и мне пришлось использовать якоря yaml и разделить на два отдельных блока:
.deploy_common:
# common config HERE
deploy_master_CD:
extends: .deploy_common
only:
refs:
- master
deploy_manual:
extends: .deploy_common
when: manual
ИЛИ все в одном, начиная с GitLab 12.3 , используя правила
deploy:
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
- when: manual
Ответ 2
Если бы я сама столкнулась с этой проблемой, то, наконец, решила (или, во всяком случае, нашла работоспособную версию для моих нужд):
build_jar:
stage: build
script:
- echo "build jar"
artifacts:
paths:
- jar/path/*.jar
only:
variables:
- $CI_PIPELINE_SOURCE == "web"
- $CI_COMMIT_REF_NAME == "master"
Условия в блоке переменных объединяются в OR, поэтому задание запускается, когда оно находится либо в основной ветки, либо запускается из Интернета (в моем случае взаимозаменяемо с 'manual'). Это не делает паузу в конвейере, как в случае "когда: вручную", но я все равно не хотел, чтобы это делалось.
Вот документы: https://docs.gitlab.com/ee/ci/yaml/#only-and-except-complex и https://docs.gitlab.com/ee/ci/variables/
Надеюсь, это поможет!
Ответ 3
Определение двух заданий упрощается с помощью параметра конфигурации extends
в GitLab 11.3. Это альтернатива использованию якорей YAML, немного более гибкая и удобочитаемая:
.deploy_common:
# common config
deploy_master_CD:
extends: .deploy_common
only:
refs:
- master
deploy_manual:
extends: .deploy_common
when: manual
Ответ 4
Точная вещь, которую вы хотите, на данный момент невозможна. Несмотря на то, что 2 задания (одно с одним only: master
и с другим, when: manual
должно предоставить альтернативу.
Если вы поместите их в одну и ту же сцену, я не думаю, что это путающе.
Вы также можете использовать некоторые специальные функции yaml, такие как якоря, чтобы оставаться сухими.