Ответ 1
Отображается список, разделенный запятыми внутри фигурных скобок:
pipelines:
branches:
'{rev,staging}':
- step:
script:
- echo 'step'
Можно ли комбинировать несколько ветвей, которые имеют те же самые шаги в конвейерах битбакета?
ex: Команды, над которыми я работаю, используют одно из двух имен для своих ветвей обзора: "rev" или "staging". В любом случае эти же шаги используются для публикации на нашем сервере обзора. Прямо сейчас ветки вызывают отдельно.
pipelines:
branches:
rev:
steps:
- echo 'step'
staging:
steps:
- echo 'step'
но может быть что-то вроде
pipelines:
branches:
rev|staging:
steps:
- echo 'step'
Отображается список, разделенный запятыми внутри фигурных скобок:
pipelines:
branches:
'{rev,staging}':
- step:
script:
- echo 'step'
Вместо интерпретации rev|staging
, гораздо более естественный способ реализации, который будет использовать последовательность стилей потока в качестве ключа:
pipelines:
branches:
[rev, staging]:
- step:
script:
- echo 'step'
Это устранит необходимость в кавычках и в том, чтобы пробелы или лишняя (запятая) запятая не имели смысловой разницы. В зависимости от библиотеки, которую использует bitbucket для обработки, вышеприведенное может корректно анализироваться, но не загружаться (например, PyYAML не может обработать вышеперечисленное, но ruamel.yaml
). Я не был в состоянии проверить, действительно ли этот предпочтительный способ работает в bitbucket.
Есть два способа работы, один из которых использует знакомую функциональность YAML якорей и псевдонимов для обеспечения повторяющихся (сложных) структур данных только один раз:
pipelines:
branches:
rev: &sharedsteps
- step:
script:
- echo 'step'
staging: *sharedsteps
Другая возможность, как уже указывали другие, заключается в использовании некоторой нестандартной интерпретации скалярных ключей со спецификацией bitbucket со встроенными запятыми. Я не нашел четкой документации по этому вопросу, но шаблоны glob кажутся применимыми, поэтому вы можете использовать {rev,staging}
в качестве ключа.
Что в этом страшного, так это то, что {
это индикатор последовательности в YAML, поэтому скаляр нужно заключить в кавычки:
pipelines:
branches:
"{rev,staging}":
- step:
script:
- echo 'step'
Выше было обновлено с использованием исправленного синтаксиса шага, предоставленного BlueM
В соответствии с просьбой Антона в комментарии к его ответу, это его идеальное решение, но с правильной структурой YAML, как и ожидалось в Bitbucket Pipelines:
pipelines:
branches:
rev: &sharedsteps
- step:
script:
- echo 'step'
staging: *sharedsteps
С Bitbucket 5.8, чтобы иметь возможность вручную запускать конвейер, мне пришлось использовать этот формат:
pipelines:
branches:
rev,staging:
- step:
script:
- echo 'step'
Так что в основном просто разделенный запятой список ветвей, которым нужен тот же самый конвейер
Это полный пример того, как вы можете использовать несколько шагов:
image: yourimage:latest
definitions:
services: ... # Service definitions go there
steps:
- step: &Test-step
name: Run tests
script:
- npm install
- npm run test
- step: &Deploy-step
name: Deploy to staging
deployment: staging
script:
- npm install
- npm run build
- fab deploy
pipelines:
default:
- step: *Test-step
- step: *Deploy-step
branches:
master:
- step: *Test-step
- step:
<<: *Deploy-step
deployment: production
trigger: manual
Узнайте больше об якорях YAML: https://confluence.atlassian.com/bitbucket/yaml-anchors-960154027.html