You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bitbucket Pipeline不支持变量设置部署环境的解决方案咨询

基于目标分支动态设置Bitbucket Pipeline部署环境的解决方案

问题场景

我希望基于$BITBUCKET_PR_DESTINATION_BRANCH设置部署环境,在set-deployment-environment步骤中通过以下代码定义ENV_NAME变量:

if [[ "$BITBUCKET_PR_DESTINATION_BRANCH" == "master" ]]; then
    export ENV_NAME=prd
elif [[ "$BITBUCKET_PR_DESTINATION_BRANCH" == "uat" ]]; then
    export ENV_NAME=uat
...

但Bitbucket Pipeline不支持deployment: $ENV_NAME这种动态变量写法,当前流水线配置如下:

pull-requests:
    release/*:
      - step: *set-deployment-environment
      - step: 
          <<: *ansible-build-deploy
          name: Deploying to environment
          deployment: $ENV_NAME

需要一个无需重复大量代码(仅需修改deployment: uat或deployment: prd这类行)的解决方案。

可行方案

利用YAML的锚点与合并特性,配合Bitbucket Pipeline的分支匹配规则,就能实现少代码复用的目标:

  1. 提取通用部署步骤锚点
    把ansible-build-deploy中除deployment外的所有通用配置抽成基础锚点,避免重复编写:
definitions:
  steps:
    - &ansible-build-deploy-base
        name: Deploying to environment
        # 这里填入原ansible-build-deploy的所有通用配置,比如脚本、镜像、依赖等
        image: ansible/ansible-runner:latest
        script:
          - ansible-playbook deploy.yml
          # 其他部署相关命令
  1. 创建分环境的部署锚点
    基于基础锚点,分别定义对应不同环境的部署步骤,仅修改deployment字段:
- &deploy-to-prd
        <<: *ansible-build-deploy-base
        deployment: prd
    - &deploy-to-uat
        <<: *ansible-build-deploy-base
        deployment: uat
  1. 配置分支匹配的流水线
    针对不同目标分支的PR,组合对应的前置步骤与部署步骤:
pull-requests:
  # 针对目标分支为master的PR
  master:
    - step: *set-deployment-environment
    - step: *deploy-to-prd
  # 针对目标分支为uat的PR
  uat:
    - step: *set-deployment-environment
    - step: *deploy-to-uat
  # 如果需要保留release/*分支的PR触发,可按需求指定默认环境
  release/*:
    - step: *set-deployment-environment
    - step: *deploy-to-uat

这种方式下,后续新增环境时,只需要新增一个&deploy-to-xxx锚点(仅修改deployment值),再在pull-requests下添加对应目标分支的步骤组合即可,完全无需重复编写大量部署代码。

内容的提问来源于stack exchange,提问作者munchine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 12:35:14