Git Bitbucket管道-具有相同步骤的多个分支
是否可以在bitbucket管道中组合具有相同步骤的多个分支 例:我工作的团队使用两个名称中的一个作为他们的评审分支,要么是“rev”要么是“staging”。无论哪种方式,都使用相同的步骤发布到我们的审阅服务器。现在,分支机构被单独调用Git Bitbucket管道-具有相同步骤的多个分支,git,yaml,bitbucket,bitbucket-pipelines,Git,Yaml,Bitbucket,Bitbucket Pipelines,是否可以在bitbucket管道中组合具有相同步骤的多个分支 例:我工作的团队使用两个名称中的一个作为他们的评审分支,要么是“rev”要么是“staging”。无论哪种方式,都使用相同的步骤发布到我们的审阅服务器。现在,分支机构被单独调用 pipelines: branches: rev: steps: - echo 'step' 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
另一种可能性是,正如其他人所指出的,使用一些非标准的、特定于位桶的、带有嵌入逗号的标量键解释。我还没有找到关于这方面的明确文档,但是似乎是适用的,所以您可以使用{rev,staging}
作为键
这其中的丑陋之处在于,{
是YAML中的流样式序列指示器,因此需要引用标量:
pipelines:
branches:
"{rev,staging}":
- step:
script:
- echo 'step'
根据Anthon在对其答案的评论中的要求,使用BlueM提供的更正步骤语法对上述内容进行了更新。这是他的完美解决方案,但具有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
定义:
服务:…#服务定义在那里
步骤:
-步骤:&测试步骤
名称:运行测试
脚本:
-npm安装
-npm运行测试
-步骤:&部署步骤
名称:部署到暂存
部署:登台
脚本:
-npm安装
-npm运行构建
-工厂部署
管道:
违约:
-步骤:*测试步骤
-步骤:*部署步骤
分支机构:
大师:
-步骤:*测试步骤
-步骤:
很酷,确实有效。(至少当使用正确的Bb管道语法时,这不是原始帖子的情况。)@BlueM你能添加正确的语法示例作为我答案的替代吗?作为devops中的一个完全的noob,这篇帖子让我很困惑。理论的终点在哪里?这是“{a,b}”
工作解决方案?[rev,staging]:
对于BitBucket的验证器无效。我认为此解决方案比其他解决方案更干净。我这样使用:'{feature/*,fix/*}“
因为所有的功能
和修复
分支都经过相同的步骤。请确保在分支配置中不要在逗号后面加空格,否则它会假定分支名称前面有空格。(所以不要这样做:'{rev,staging}
)非常感谢它现在正在工作。我像这样使用它。”{release/**,hotfix/**}“:
我知道。在使用验证器时,我遇到了各种语法,它们确实有效,但被报告为无效。显然,验证器没有使用与实际管道相同的代码库/语言/库进行解析。只是尝试了这种语法,bitbucket本身出现了验证错误。bitbucket管道确实支持YAML别名和anchors,但验证器没有。如果您想验证yaml,请通过在线yaml json转换器(yaml=>json=>yaml)将其运行到,并将生成的yaml呈现给验证器。仔细检查,我在2019年2月18日的bitbucket.org上没有这样做。
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