Как выполнить задачу Concourse условно? - PullRequest
0 голосов
/ 25 апреля 2019

Я изменяю сценарий конкурса, который я унаследовал.

У нас есть конвейер, который выглядит следующим образом:

[1]build - [2]test A - [3]test B - [4]publish - [5]deploy

Раньше наша команда работала только с главной веткой, но сейчас мы используем ветви функций.

Я внес изменение в build step для запуска для каждой ветви - не только для мастера.Но я хочу, чтобы publish step запускался только для мастер-веток .

Как заставить step 5 работать только тогда, когда step 1 был запущен для мастерафилиал ?Есть ли способ сделать это на Зале?

1 Ответ

0 голосов
/ 05 мая 2019

Если один и тот же конвейер строит все ветви, то либо вы не используете ресурс git, либо используете модифицированный ресурс git, который поддерживает несколько ветвей.

Я предполагаю, что то, что вы называете "шагами" 1... 5 заданий конкурса.

Я вижу два варианта.

  • Вариант 1. Простой, но грязный / вводящий в заблуждение.

В началеиз шагов 4 и 5 проверьте ветвь git.Если не мастер, немедленно верните успех.Конвейер будет оставаться зеленым, а задания публикации и развертывания будут выглядеть так, как будто они выполнялись, хотя на самом деле они ничего не делали.

  • Вариант 2. Немного более сложный, но правильный путь.

Используйте два трубопровода.Один конвейер для всех филиалов, кроме основного.Этот конвейер будет содержать только шаги 1 ... 3. Второй конвейер будет отслеживать главную ветвь и будет иметь все шаги 1 ... 5.

Теперь вопрос заключается в том, как управлять этими двумя конвейерами в DRY.мода (без дублирования кода, нет возможности, чтобы конвейеры отходили друг от друга)?

Ответ заключается в использовании инструмента слияния YAML, например https://github.com/geofffranks/spruce. В README упоминается BOSH, но этоПолностью универсальный инструмент слияния YAML.

Последняя часть - как оставаться СУХИМЫМ и в то же время указывать разные ветви.Это можно получить с помощью https://concourse -ci.org / setting-pipelines.html # pipeline-vars .

...