如何在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
相关产品推荐
相关产品推荐

