Bitbucket流水线中能否为已定义步骤添加条件执行逻辑?
Bitbucket Monorepo流水线条件步骤复用问题
需求与场景
我有一个配置了Bitbucket流水线的Monorepo项目,需要实现:
- 默认构建(代码推送触发)仅运行Monorepo中发生变更的项目对应的步骤,每个项目使用独立的预定义步骤
- 特定环境的自定义构建需无条件运行所有项目的预定义步骤
已预定义以下步骤:
definitions: steps: - step: &ExampleProjectBuildStep name: Example Project Build Step script: - echo 'Example project build step' - step: &ExampleProjectBuildStep2 name: Example Project Build Step 2 script: - echo 'Example project build step 2'
期望的流水线配置(带条件的并行默认构建)如下,但不确定是否需要为有无条件场景分别定义步骤:
pipelines: default: - parallel - step: *ExampleProjectBuildStep condition: changesets: includePaths: - "example_path/**" - step: *ExampleProjectBuildStep2 condition: changesets: includePaths: - "example_path_2/**" example_custom_pipeline: - step: *ExampleProjectBuildStep - step: *ExampleProjectBuildStep2
注:在另一个未预定义步骤的简单Monorepo中,并行条件步骤可正常运行。
解答
不需要为有无条件场景分别定义步骤,Bitbucket Pipelines支持在引用预定义步骤时附加条件,核心是使用YAML映射合并语法修正配置写法:
正确配置示例
definitions: steps: - step: &ExampleProjectBuildStep name: Example Project Build Step script: - echo 'Example project build step' - step: &ExampleProjectBuildStep2 name: Example Project Build Step 2 script: - echo 'Example project build step 2' pipelines: default: - parallel: - step: <<: *ExampleProjectBuildStep condition: changesets: includePaths: - "example_path/**" - step: <<: *ExampleProjectBuildStep2 condition: changesets: includePaths: - "example_path_2/**" example_custom_pipeline: - step: *ExampleProjectBuildStep - step: *ExampleProjectBuildStep2
关键说明
- YAML合并语法:使用
<<: *锚点名称将预定义步骤的配置和新增的condition字段合并,这是实现复用+条件的核心,之前的写法因语法错误无法生效 - 缩进规范:确保
parallel:后接冒号,子步骤正确缩进,符合YAML语法要求 - 条件逻辑:
changesets条件会自动跳过无变更路径对应的步骤,满足默认构建只运行变更项目的需求 - 自定义流水线:直接引用预定义步骤即可,无需附加条件,实现无条件运行所有步骤的目标
内容的提问来源于stack exchange,提问作者Josh Doug
相关产品推荐
相关产品推荐

