如何将 Bitbucket 存储库环境变量中定义的多个角色 ARN 动态传递到管道中的步骤变量?
我在 Bitbucket 存储库环境变量中定义了三个角色 ARN,名为 OIDC_ROLE_ARN_dev、OIDC_ROLE_ARN_stage 和 OIDC_ROLE_ARN_master,分别对应于分支名称 dev、stage 和 master。我想根据当前分支动态选择适当的角色ARN并将其用作步骤变量。
我尝试使用间接扩展(例如 OIDC_ROLE_ARN="OIDC_ROLE_ARN_${BITBUCKET_BRANCH}")然后使用 ${!OIDC_ROLE_ARN} 来实现此目的。虽然这在本地工作得很好,但它会在管道环境中引发语法错误“错误替换”。
这是我的管道步骤:
- step: &build-and-push-fitserver-image
name: Build and Push fitServer Image to ECR
oidc: true
script:
- OIDC_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: ${!OIDC_ROLE_ARN}
IMAGE_NAME: fitserver
TAGS: "${BITBUCKET_BRANCH} latest"
有人可以建议一种在不使用 if-else 条件的情况下解决此问题的方法吗?
如果您仅使用变量进行部署,则可以为每个部署环境定义其值,而不是为所有管道定义全局值。
请参阅 https://support.atlassian.com/bitbucket-cloud/docs/variables-and-secrets/#Deployment-variables
然后,您可以使用具有相同名称的不同值,以及附加的
$BITBUCKET_DEPLOYMENT_ENVIRONMENT
。
definitions:
yaml-enchors:
- &deploy-step
name: Build and Push fitServer Image to ECR
oidc: true
script:
- docker build -t fitserver:${BITBUCKET_DEPLOYMENT_ENVIRONMENT} -t fitserver:latest .
- pipe: atlassian/aws-ecr-push-image:2.4.0
variables:
AWS_OIDC_ROLE_ARN: ${AWS_ROLE_ARN}
IMAGE_NAME: fitserver
TAGS: "${BITBUCKET_DEPLOYMENT_ENVIRONMENT} latest"
pipelines:
branches:
dev:
- step:
<<: *deploy-step
deployment: development
stage:
- step:
<<: *deploy-step
deployment: staging
master:
- step:
<<: *deploy-step
deployment: production
否则,您对
${!OIDC_ROLE_ARN}
的尝试是在正确的路径中,但请注意您在管道指令中使用它,而不是在 shell 指令中使用它。
对于脚本列表中的每条指令,管道运行程序将
现在,管道对变量替换有一定的支持(例如
$FOO
、${BAR}
),但是它们不是 shell。如果不支持某些语法,只需在管道之前评估字符串指令中的间接变量即可!
- step: &build-and-push-fitserver-image
name: Build and Push fitServer Image to ECR
oidc: true
deployment: xxx
script:
- OIDC_ROLE_ARN_VAR="OIDC_ROLE_ARN_${BITBUCKET_DEPLOYMENT_ENVIRONMENT}"
- OIDC_ROLE_ARN=${!OIDC_ROLE_ARN_VAR}
- docker build -t fitserver:${BITBUCKET_DEPLOYMENT_ENVIRONMENT} -t fitserver:latest .
- pipe: atlassian/aws-ecr-push-image:2.4.0
variables:
AWS_OIDC_ROLE_ARN: ${OIDC_ROLE_ARN}
IMAGE_NAME: fitserver
TAGS: "${BITBUCKET_DEPLOYMENT_ENVIRONMENT} latest"