Bitbucketパイプライン内で同じステップを持つ複数のブランチを組み合わせることが可能ですか?
例:私が取り組んでいるチームは、レビューブランチに「rev」または「stageing」の2つの名前のいずれかを使用しています。どちらの方法でも、同じ手順を使用してレビューサーバーに公開します。現在、ブランチは個別に呼び出されます。
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'
これは、someステップを再利用する方法の完全な例です。
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
rev|staging
を解釈する代わりに、フロースタイルシーケンスをキーとして使用することで、はるかに自然な方法で実装できます。
pipelines:
branches:
[rev, staging]:
- step:
script:
- echo 'step'
これにより、引用符を付ける必要がなくなり、スペースを追加したり、余分な(末尾の)コンマを使用したりしても、意味上の違いはありません。これを処理するためにbitbucketが使用するライブラリに応じて、上記は正しく解析されてもロードされない場合があります(たとえば、PyYAMLは上記を処理できませんが、ruamel.yaml
)。 この望ましい方法が実際にbitbucketで機能するかどうかを確認できませんでした。
機能する方法は2つあり、1つはアンカーとエイリアスの使い慣れたYAML機能を使用して、繰り返される(複雑な)データ構造を1回だけ提供します。
pipelines:
branches:
rev: &sharedsteps
- step:
script:
- echo 'step'
staging: *sharedsteps
他の可能性は、他の人が示したように、埋め込まれたコンマのあるスカラーキーのいくつかの非標準のbitbucket固有の解釈を使用することです。これに関する明確なドキュメントは見つかりませんでしたが、 globパターン は適切であると思われるため、{rev,staging}
をキーとして使用できます。
これについて醜いのは、{
がYAMLのフロースタイルのシーケンスインジケーターであるため、スカラーを引用する必要があることです。
pipelines:
branches:
"{rev,staging}":
- step:
script:
- echo 'step'
上記は、BlueMが提供する修正されたステップ構文を使用して更新されました
Anthonの回答へのコメントで要求されているように、これは彼の完璧なソリューションですが、Bitbucket Pipelinesが期待する正しいYAML構造を使用しています。
pipelines:
branches:
rev: &sharedsteps
- step:
script:
- echo 'step'
staging: *sharedsteps
Bitbucket 5.8では、パイプラインを手動でトリガーできるようにするために、次の形式を使用する必要がありました。
pipelines:
branches:
rev,staging:
- step:
script:
- echo 'step'
したがって、基本的には同じパイプラインを必要とするカンマ区切りのブランチリスト