是否可以组合在bitbucket管道中具有相同步骤的多个分支?
ex:我工作的团队使用两个名称之一作为他们的评论分支,“rev”或“staging”。无论哪种方式,都使用相同的步骤发布到我们的审查服务器。现在,分支被单独调出。
pipelines:
branches:
rev:
steps:
- echo 'step'
staging:
steps:
- echo 'step'
但可能是
pipelines:
branches:
rev|staging:
steps:
- echo 'step'
答案 0 :(得分:31)
大括号内的逗号分隔列表似乎有效:
C:\>py -2 test.py
2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)]
c:\windows\web\wallpaper\theme1\img1.jpg
c:\windows\web\wallpaper\theme1\img1.jpg
C:\>py -3 test.py
3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
b'c:\\windows\\web\\wallpaper\\theme1\\img1.jpg'
c:\windows\web\wallpaper\theme1\img1.jpg
答案 1 :(得分:8)
而不是解释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 patterns似乎适用,因此您可以使用{rev,staging}
作为密钥。
有什么丑陋的是{
是YAML中的流式序列指示符,因此需要引用标量:
pipelines:
branches:
"{rev,staging}":
- step:
script:
- echo 'step'
使用BlueM提供的更正步骤语法
更新上述内容答案 2 :(得分:7)
这是有关如何重复使用 一些 步骤的完整示例:
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
答案 3 :(得分:3)
根据Anthon对他的回答的评论,这是他的完美解决方案,但正如Bitbucket Pipelines所期望的那样正确的YAML结构:
pipelines:
branches:
rev: &sharedsteps
- step:
script:
- echo 'step'
staging: *sharedsteps
答案 4 :(得分:1)
使用Bitbucket 5.8以便能够手动触发管道我必须使用这种格式:
pipelines:
branches:
rev,staging:
- step:
script:
- echo 'step'
所以基本上只是逗号分隔的分支列表需要相同的管道