Bitbucket Pipeline标签阶段复用步骤未执行,需切换分支部署生产环境
问题原因
你的流水线中tags阶段的<<: *build_and_deploy未执行核心构建部署脚本,本质是YAML的键覆盖规则导致的:当同一个step节点中同时定义script字段和引用锚点时,本地的script会完全替换锚点中的script内容,而不是合并数组。因此tags阶段只执行了git checkout -b master,锚点里的构建命令被覆盖了。
解决方案
我们可以通过拆分锚点的方式,既复用通用配置(缓存、资源规格),又灵活组合不同阶段的脚本,同时保证每个部署环境对应唯一的部署项:
# Variables: # Repository: # - NETLIFY_AUTH_TOKEN # Deployments: # - NETLIFY_SITE_ID image: node:14.21.3 definitions: # 抽离构建部署的核心脚本,方便复用 - &core_deploy_scripts - npm install - npm run build - npm run deploy steps: # 基础步骤模板:包含通用配置(缓存、资源规格),不含脚本 - step: &base_deploy_step caches: - node size: 2x pipelines: branches: develop: - step: <<: *base_deploy_step name: Build and Deploy develop branch deployment: Development script: *core_deploy_scripts tags: "*.*.*": - step: <<: *base_deploy_step name: Build and Deploy master branch on tag deployment: Production script: - git checkout -b master - *core_deploy_scripts
方案说明
- 复用性:
base_deploy_step锚点统一管理缓存、资源规格等通用配置,core_deploy_scripts锚点统一管理构建部署命令,避免重复代码。 - 部署项唯一性:
develop分支对应Deployment: Development,tags阶段对应Deployment: Production,每个部署环境仅关联一个流水线步骤,符合你的要求。 - 脚本组合:
tags阶段的script先执行分支切换命令,再引用核心部署脚本,确保所有步骤按顺序执行。
内容的提问来源于stack exchange,提问作者ashen madusanka
相关产品推荐
相关产品推荐

