Azure DevOps YAML 中基于条件的动态变量分配

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

我面临着根据与分支名称相关的条件在 Azure DevOps YAML 中动态分配变量的问题。我的目标是分配稍后可以在任务中使用的特定变量。但是,在尝试使用 YAML 文件中的条件设置 AZURE_SUBSCRIPTION 变量时,我遇到了问题。

这是我的 YAML 的相关部分:

variables:
  BRANCH_NAME: $[replace(variables['Build.SourceBranch'], 'refs/heads/', '')]
  ${{ if eq(variables['BRANCH_NAME'], 'dev') }}:
    TF_ENVIRONMENT: dev
    AZURE_SUBSCRIPTION: xxxx
    AZURE_SUBSCRIPTION_ID: xxx
  ${{ elseif eq(variables['BRANCH_NAME'], 'staging') }}:
    TF_ENVIRONMENT: stage
    AZURE_SUBSCRIPTION: 'test'
    AZURE_SUBSCRIPTION_ID: xxxx
  ${{ elseif eq(variables['BRANCH_NAME'], 'feature/xxx') }}:
    TF_ENVIRONMENT: xxx
    AZURE_SUBSCRIPTION: xxxx
    AZURE_SUBSCRIPTION_ID: xxxx
  ${{ elseif eq(variables['BRANCH_NAME'], 'master') }}:
    TF_ENVIRONMENT: prod
    AZURE_SUBSCRIPTION: xxxxx
    AZURE_SUBSCRIPTION_ID: xxxxx

steps:
  - script:
      # ...
  - task: AzureCLI@2
    inputs:
      azureSubscription: $(AZURE_SUBSCRIPTION)

${{ if eq(variables['Build.SourceBranchName'], 'dev') }} 的技巧可以完成工作,但对我来说这是不行的,因为它无法处理带有 '/' 的分支。

我的问题在于 AZURE_SUBSCRIPTION 变量似乎没有按预期分配。我怀疑我的条件逻辑或引用变量的方式可能存在错误。 有人可以查看我的 YAML 并提供有关 AZURE_SUBSCRIPTION 变量未正确分配的原因的见解吗?

azure-devops yaml azure-pipelines azure-pipelines-yaml azure-pipelines-build-task
1个回答
0
投票

您的字符串替换错误。 使用

BRANCH_NAME: $[replace(variables['Build.SourceBranch'], 'refs/heads/', '')]
代替
BRANCH_NAME: ${{ replace(variables['Build.SourceBranch'], 'refs/heads/', '') }}
。 请注意将
$[]
替换为
${{}}

正如我在评论中提到的,您可以将整个字符串替换表达式替换为

BRANCH_NAME: ${{ variables['Build.SourceBranchName'] }}
Build.SourceBranchName
仅提供分支名称。 来源在这里。

© www.soinside.com 2019 - 2024. All rights reserved.