动态访问管道中的Bitbucket环境变量

问题描述 投票:0回答:1

如何将 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 条件的情况下解决此问题的方法吗?

bash shell bitbucket-pipelines
1个回答
0
投票

如果您仅使用变量进行部署,则可以为每个部署环境定义其值,而不是为所有管道定义全局值。

请参阅 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 指令中使用它。

对于脚本列表中的每条指令,管道运行程序将

  • 如果它是 YAML 标量字符串,则在 shell 中对其进行评估
  • 如果是 YAML 映射则执行管道

现在,管道对变量替换有一定的支持(例如

$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"
© www.soinside.com 2019 - 2024. All rights reserved.