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

如何在Bitbucket Pipelines中动态传递分支对应Role ARN

解决Bitbucket Pipeline中根据分支动态选择OIDC角色ARN的问题

Bitbucket Pipeline默认使用的是dash shell(而非bash),而你用到的${!OIDC_ROLE_ARN}是bash特有的间接展开语法,dash不支持,因此会抛出"syntax error 'bad substitution'"错误。以下是两种无需if-else条件的解决方案:

方案一:使用eval命令动态赋值

通过eval将对应分支的ARN变量值提取到临时变量中,再在pipe中引用该临时变量:

- step: &build-and-push-fitserver-image
    name: Build and Push fitServer Image to ECR
    oidc: true
    script:
      # 直接拼接变量名并通过eval赋值
      - eval "TARGET_ROLE_ARN=\$OIDC_ROLE_ARN_${BITBUCKET_BRANCH}"
      - docker build -t fitserver:${BITBUCKET_BRANCH} -t fitserver:latest .
      - pipe: atlassian/aws-ecr-push-image:2.4.0
        variables:
          AWS_OIDC_ROLE_ARN: $TARGET_ROLE_ARN
          IMAGE_NAME: fitserver
          TAGS: "${BITBUCKET_BRANCH} latest"

方案二:使用printenv结合文本提取

如果担心eval的安全风险,可以通过环境变量输出+文本过滤的方式获取目标ARN:

- step: &build-and-push-fitserver-image
    name: Build and Push fitServer Image to ECR
    oidc: true
    script:
      # 过滤出对应分支的环境变量并提取值
      - TARGET_ROLE_ARN=$(printenv | grep "^OIDC_ROLE_ARN_${BITBUCKET_BRANCH}=" | cut -d= -f2)
      - docker build -t fitserver:${BITBUCKET_BRANCH} -t fitserver:latest .
      - pipe: atlassian/aws-ecr-push-image:2.4.0
        variables:
          AWS_OIDC_ROLE_ARN: $TARGET_ROLE_ARN
          IMAGE_NAME: fitserver
          TAGS: "${BITBUCKET_BRANCH} latest"

两种方案都能在dash环境下正常工作,无需针对分支写if-else判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:33:08