Трубопроводы Bitbucket - несколько ветвей с одинаковыми шагами

Можно ли комбинировать несколько ветвей, которые имеют те же самые шаги в конвейерах битбакета?

ex: Команды, над которыми я работаю, используют одно из двух имен для своих ветвей обзора: "rev" или "staging". В любом случае эти же шаги используются для публикации на нашем сервере обзора. Прямо сейчас ветки вызывают отдельно.

pipelines:
     branches:
          rev:
               steps:
                    - echo 'step'
          staging:
               steps:
                    - echo 'step'

но может быть что-то вроде

pipelines:
     branches:
          rev|staging:
               steps:
                    - echo 'step'

Ответ 1

Отображается список, разделенный запятыми внутри фигурных скобок:

pipelines:
  branches:
    '{rev,staging}':
      - step:
        script:
          - echo 'step'

Ответ 2

Вместо интерпретации 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

Ответ 3

В соответствии с просьбой Антона в комментарии к его ответу, это его идеальное решение, но с правильной структурой YAML, как и ожидалось в Bitbucket Pipelines:

pipelines:
  branches:
    rev: &sharedsteps
      - step:
          script:
            - echo 'step'
    staging: *sharedsteps

Ответ 4

С Bitbucket 5.8, чтобы иметь возможность вручную запускать конвейер, мне пришлось использовать этот формат:

pipelines:
  branches:
    rev,staging:
      - step:
        script:
          - echo 'step'

Так что в основном просто разделенный запятой список ветвей, которым нужен тот же самый конвейер

Ответ 5

Это полный пример того, как вы можете использовать несколько шагов:

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