如何根据分支名称向ARM模板传递KeyVault名称变量?
解决根据分支名称动态传递KeyVault名称到ARM模板的问题
你的配置核心问题在于AzureResourceManagerTemplateDeployment@3任务没有正确传递参数到ARM模板,以下是修正方案:
1. 确认变量定义(无需修改)
你的YAML变量部分使用编译时表达式${{ }},会在流水线运行前根据分支确定keyVaultName的值,这部分是正确的:
variables: isProduction: ${{ eq(variables['Build.SourceBranch'], 'refs/heads/main') }} ${{ if eq(variables.isProduction, true) }}: keyVaultName: 'MyKeyVaultMain' azureResourceManagerConnection: 'Web Hosting' # 其他生产环境变量 ${{ else }}: keyVaultName: 'MyKeyVaultTest' azureResourceManagerConnection: 'Test & Development' # 其他测试环境变量
2. 修改ARM模板部署任务
任务中不能直接写keyVaultName: '$(keyVaultName)'(该字段不属于任务的输入参数),需要通过overrideParameters将流水线变量传递给ARM模板的keyvault_name参数:
- task: AzureResourceManagerTemplateDeployment@3 inputs: deploymentScope: 'Resource Group' azureResourceManagerConnection: '$(azureResourceManagerConnection)' subscriptionId: '$(subscription)' action: 'Create Or Update Resource Group' resourceGroupName: 'KeyVault-RG' templateLocation: 'Linked artifact' csmFile: 'keyvault/keyvault-template.json' # 新增overrideParameters传递模板参数 overrideParameters: '-keyvault_name $(keyVaultName)' deploymentMode: 'Incremental'
3. ARM模板确认(无需修改)
你的ARM模板已经正确定义了keyvault_name参数,并在资源名称中引用,这部分保持原样即可:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "keyvault_name": { "defaultValue": "KeyVault-DevTest", "type": "String" } }, "variables": {}, "resources": [{ "type": "Microsoft.KeyVault/vaults", "apiVersion": "2023-02-01", "name": "[parameters('keyvault_name')]", // 其他KeyVault配置 }] }
修正后,流水线会根据当前分支自动设置keyVaultName,并通过overrideParameters传递给ARM模板,从而创建对应名称的KeyVault。
内容的提问来源于stack exchange,提问作者st_user_321122
相关产品推荐
相关产品推荐

