如何在Azure DevOps Pipeline中动态获取密钥与配置项信息?
能否动态获取Azure Key Vault和App Configuration任务返回的密钥/配置项名称,用于脚本及其他任务?
问题描述
我在Azure中部署了Key Vault和App Configuration服务,需要在多个Azure Pipelines(YAML及经典发布流水线)中读取其中的部分密钥和配置项。这些资源是通过Bicep动态预配的,我只知道密钥/配置项的前缀,不清楚具体数量和名称。
目前我可以用官方的Key Vault和App Configuration任务读取对应值,但没法动态获取读取到的具体项名称及完整列表。所有官方示例都预设我提前知晓每个项的名称(比如用$(mySecretName)),这导致我要么硬编码名称,要么用解析配置文件生成YAML这类临时方案,经典发布流水线更是完全没法实现动态映射,而我需要把这些项直接映射到appsettings.json这类资源中。
注:代码中加载配置不是问题,我要的是在流水线任务中获取所有配置项和密钥的完整列表。
解决方案
1. 动态获取Azure Key Vault密钥列表及值
官方任务不支持直接输出密钥列表,可通过Azure CLI任务实现:
# 获取指定前缀的密钥名称列表,输出为TSV格式并存入文件 az keyvault secret list --vault-name <你的Key Vault名称> --query "[?starts_with(name, '<你的前缀>')].name" -o tsv > secrets_list.txt # 遍历密钥列表,将每个密钥的值设为流水线变量(YAML流水线适用,敏感值标记为secret) while IFS= read -r secretName; do secretValue=$(az keyvault secret show --vault-name <你的Key Vault名称> --name $secretName --query value -o tsv) echo "##vso[task.setvariable variable=$secretName;issecret=true]$secretValue" done < secrets_list.txt
如果是经典发布流水线,可将输出的密钥列表文件保存为流水线工件,后续脚本任务读取该文件进行处理。
2. 动态获取Azure App Configuration配置项列表及值
使用Azure CLI的appconfig扩展(首次运行需安装)来拉取配置项:
# 安装Azure App Configuration CLI扩展(仅首次运行需要) az extension add --name appconfig # 获取指定前缀的配置项,导出为JSON格式 az appconfig kv list --name <你的App Configuration名称> --prefix <你的前缀> --query "[].{key:key, value:value}" -o json > appconfig_items.json # 遍历配置项,将其设为流水线变量(YAML流水线适用) for item in $(az appconfig kv list --name <你的App Configuration名称> --prefix <你的前缀> --query "[].{key:key, value:value}" -o tsv); do key=$(echo $item | cut -f1) value=$(echo $item | cut -f2) echo "##vso[task.setvariable variable=$key]$value" done
经典发布流水线中,可将导出的JSON文件作为工件,用PowerShell脚本读取并映射到appsettings.json:
$configItems = Get-Content appconfig_items.json | ConvertFrom-Json $appSettings = Get-Content appsettings.json | ConvertFrom-Json foreach ($item in $configItems) { $appSettings | Add-Member -NotePropertyName $item.key -NotePropertyValue $item.value -Force } $appSettings | ConvertTo-Json -Depth 10 | Set-Content appsettings.json
3. 关键注意事项
- 确保流水线使用的服务主体拥有Key Vault的
Secret Reader权限,以及App Configuration的Data Reader权限 - Key Vault密钥属于敏感数据,设置流水线变量时必须加上
issecret=true标记,防止值泄露到日志中 - 经典发布流水线无法直接在任务间传递变量列表,需通过工件文件传递数据后再解析处理
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

