Bitbucket 管道 - 具有相同步骤的多个分支
Bitbucket Pipelines - multiple branches with same steps
是否可以合并 bitbucket 管道中具有相同步骤的多个分支?
ex:我工作的团队使用两个名称之一作为他们的审查分支,"rev" 或 "staging"。无论哪种方式,都使用相同的步骤发布到我们的评论服务器。现在各分支分别调出。
pipelines:
branches:
rev:
steps:
- echo 'step'
staging:
steps:
- echo 'step'
但会不会像
pipelines:
branches:
rev|staging:
steps:
- 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
另一种可能性是,正如其他人所指出的那样,使用一些 non-standard、bitbucket 特定的、带有嵌入式逗号的标量键的解释。我没有找到关于此的明确文档,但 glob patterns 似乎适用,因此您可以使用 {rev,staging}
作为键。
丑陋的是,{
是YAML中的flow-style序列指示符,因此需要引用标量:
pipelines:
branches:
"{rev,staging}":
- step:
script:
- echo 'step'
以上是使用 BlueM 提供的更正步骤语法更新的
正如 Anthon 在对他的回答的评论中所要求的,这是他的完美解决方案,但具有 Bitbucket Pipelines 所期望的正确 YAML 结构:
pipelines:
branches:
rev: &sharedsteps
- step:
script:
- echo 'step'
staging: *sharedsteps
大括号内的逗号分隔列表似乎有效:
pipelines:
branches:
'{rev,staging}':
- step:
script:
- echo 'step'
对于 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
是否可以合并 bitbucket 管道中具有相同步骤的多个分支?
ex:我工作的团队使用两个名称之一作为他们的审查分支,"rev" 或 "staging"。无论哪种方式,都使用相同的步骤发布到我们的评论服务器。现在各分支分别调出。
pipelines:
branches:
rev:
steps:
- echo 'step'
staging:
steps:
- echo 'step'
但会不会像
pipelines:
branches:
rev|staging:
steps:
- 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
另一种可能性是,正如其他人所指出的那样,使用一些 non-standard、bitbucket 特定的、带有嵌入式逗号的标量键的解释。我没有找到关于此的明确文档,但 glob patterns 似乎适用,因此您可以使用 {rev,staging}
作为键。
丑陋的是,{
是YAML中的flow-style序列指示符,因此需要引用标量:
pipelines:
branches:
"{rev,staging}":
- step:
script:
- echo 'step'
以上是使用 BlueM 提供的更正步骤语法更新的
正如 Anthon 在对他的回答的评论中所要求的,这是他的完美解决方案,但具有 Bitbucket Pipelines 所期望的正确 YAML 结构:
pipelines:
branches:
rev: &sharedsteps
- step:
script:
- echo 'step'
staging: *sharedsteps
大括号内的逗号分隔列表似乎有效:
pipelines:
branches:
'{rev,staging}':
- step:
script:
- echo 'step'
对于 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