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

Azure DevOps如何遍历AzureKeyVault@2输出批量创建Kubernetes密钥

核心结论

不存在用你写的${{ each }}模板语法直接遍历AzureKeyVault@2拉取结果的实现方式。原因是${{ }}是流水线编译阶段执行的逻辑,这个阶段AzureKeyVault@2任务还没运行,根本拿不到后续才从Key Vault拉取到的密钥列表,自然无法完成遍历。

AzureKeyVault@2的行为是把拉取到的密钥转换为作业运行时的环境变量,你需要用运行时脚本遍历环境变量的方式批量创建Kubernetes密钥,具体实现如下。

实现步骤
  • 给AzureKeyVault@2任务配置密钥变量前缀,方便后续过滤Key Vault注入的变量,避免和系统变量、其他自定义变量混淆
  • 提前完成Kubernetes集群的鉴权配置
  • 用Shell脚本在运行时遍历所有带指定前缀的环境变量,批量调用kubectl创建Secret
完整可运行YAML示例
jobs:
  - job: syncSecrets
    steps:
      - task: AzureKeyVault@2
        inputs:
          connectedServiceName: myAzureConnection
          keyVaultName: myKeyVaultName
          secretsFilter: "*"
          secretsPrefix: "KV_" # 给所有KeyVault注入的变量加统一前缀
          runAsPreJob: true

      # 初始化Kubernetes集群连接
      - task: Kubernetes@1
        inputs:
          connectionType: Kubernetes Service Connection
          kubernetesServiceEndpoint: myServiceConnection
          namespace: clusterNameSpace
          command: login

      # 运行时批量创建Secret
      - task: Bash@3
        inputs:
          targetType: "inline"
          script: |
            # 遍历所有KV_开头的环境变量
            for envVar in $(compgen -e | grep "^KV_"); do
              # 提取原始密钥名:去掉前缀,把变量里的下划线替换回横杠(适配KeyVault变量名替换规则)
              secretName=${envVar#KV_}
              secretName=${secretName//_/-}
              secretValue="${!envVar}"

              # 先删除已存在的同名密钥,避免创建冲突
              kubectl delete secret "${secretName}" -n clusterNameSpace --ignore-not-found
              # 创建新的通用密钥
              kubectl create secret generic "${secretName}" -n clusterNameSpace --from-literal=KEY="${secretValue}"
              echo "成功创建Kubernetes密钥: ${secretName}"
            done
注意事项
  • AzureKeyVault@2注入环境变量时,会自动把原始密钥名中的.、-等特殊字符替换为下划线,如果你需要100%匹配Key Vault里的原始密钥名,可以在KeyVault任务前加一个AzureCLI任务,调用az keyvault secret list拉取所有密钥的原始名称列表,后续遍历原始名称列表、按变量名转换规则取对应环境变量值即可,避免名称转换偏差
  • 如果你的Kubernetes密钥需要存多个键值对,调整kubectl create secret命令里的--from-literal参数追加对应项就行

内容的提问来源于stack exchange,提问作者Joost Döbken

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:21:17