You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 14:52:52