我面临着根据与分支名称相关的条件在 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 变量未正确分配的原因的见解吗?
您的字符串替换错误。 使用
BRANCH_NAME: $[replace(variables['Build.SourceBranch'], 'refs/heads/', '')]
代替 BRANCH_NAME: ${{ replace(variables['Build.SourceBranch'], 'refs/heads/', '') }}
。
请注意将 $[]
替换为 ${{}}
。
正如我在评论中提到的,您可以将整个字符串替换表达式替换为
BRANCH_NAME: ${{ variables['Build.SourceBranchName'] }}
。
Build.SourceBranchName
仅提供分支名称。 来源在这里。