Bitbucket Pipelines — несколько веток с одинаковыми шагами

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

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

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

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

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

person Gery Teague    schedule 17.02.2017    source источник


Ответы (5)


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

pipelines:
  branches:
    '{rev,staging}':
      - step:
        script:
          - echo 'step'
person RH Becker    schedule 02.07.2017
comment
Я думаю, что это решение чище, чем другие. Я использую его так: '{feature/*,fix/*}', потому что все ветки feature и fix проходят одни и те же шаги. - person ordonezalex; 20.07.2017
comment
Убедитесь, что вы не ставите пробел после запятой в конфигурации ветвей, иначе он будет считать, что имя вашей ветки имеет пробел перед ним. (так что НЕ делайте: '{rev, staging}') - person Jones03; 22.10.2018
comment
Большое спасибо, теперь это работает. Я использую это так '{release/**,hotfix/**}': - person Mina Luke; 24.07.2019

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

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

person Max Malysh    schedule 21.11.2018

Вместо интерпретации rev|staging гораздо более естественным способом реализации было бы использование последовательности стилей потока в качестве ключа:

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

Это избавит от необходимости заключать в кавычки и следить за тем, чтобы пробелы или лишняя (конечная) запятая не имели семантического значения. В зависимости от библиотеки, которую битбакет использует для обработки, приведенное выше может быть правильно проанализировано, но не загружено (например, PyYAML не может обработать вышеуказанное, но ruamel.yaml). Мне не удалось проверить, действительно ли этот предпочтительный способ работает в битбакете.

Есть два работающих способа, один из которых использует знакомую функциональность якорей и псевдонимов YAML для предоставления повторяющихся (сложных) структур данных только один раз:

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

Другая возможность, как указывали другие, заключается в использовании некоторой нестандартной, специфичной для битбакета интерпретации скалярных ключей со встроенными запятыми. Я не нашел четкой документации по этому вопросу, но шаблоны подстановки кажутся применимыми, поэтому вы можете использовать {rev,staging} в качестве ключа.

Уродливое в этом то, что { — это индикатор последовательности в стиле потока в YAML, поэтому скаляр нужно заключать в кавычки:

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

Приведенное выше было обновлено с использованием исправленного синтаксиса шага, предоставленного BlueM

person Anthon    schedule 17.02.2017
comment
Круто, действительно работает. (По крайней мере, при использовании правильного синтаксиса Bb Pipeline, чего нет в исходном сообщении.) - person BlueM; 23.02.2017
comment
@BlueM Не могли бы вы добавить пример исправленного синтаксиса в качестве альтернативы моему ответу? - person Anthon; 30.05.2017
comment
Будучи полным нубом в devops, этот пост меня смущает. Где заканчивается теория и является ли это "{a,b}" рабочим решением? - person Qwerty; 27.02.2019
comment
[rev, staging]: недействителен для валидатора BitBucket. - person Roman Podlinov; 22.06.2020

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

pipelines:
  branches:
    rev: &sharedsteps
      - step:
          script:
            - echo 'step'
    staging: *sharedsteps
person BlueM    schedule 30.05.2017
comment
Я знаю. При использовании валидатора я столкнулся с различными синтаксисами, которые работают, но сообщаются как недопустимые. Очевидно, что валидатор не использует ту же кодовую базу/язык/библиотеку для синтаксического анализа, что и реальный конвейер. - person BlueM; 09.11.2017
comment
Только что попробовал этот синтаксис, и сам битбакет выдал ошибку проверки. - person Snaver; 08.01.2018
comment
Конвейеры Bitbucket поддерживают псевдонимы и привязки YAML, а валидатор — нет. Если вы хотите проверить yaml, запустите его через онлайн-конвертер yaml-json (YAML => JSON => YAML) и представьте полученный YAML валидатору. - person bert bruynooghe; 18.04.2018

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

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

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

person Attila Csányi    schedule 07.03.2018
comment
Дважды проверил, и у меня это не сработало на bitbucket.org 18 февраля 2019 года. - person Nino van Hooff; 18.02.2019