Yaml 使用动态变量组的动态模板在下载安全文件时导致问题

Yaml 使用动态变量组的动态模板在下载安全文件时导致问题,yaml,azure-pipelines,Yaml,Azure Pipelines,我有一个CI/CD多级模板,其中我的CD阶段依赖于我在yaml文件中提供的参数 管道指向Pipeline.yml servers: DEV: - srv-apimgmt37p 在我的模板中,我有一个检查服务器并传递值的循环,因此它可以根据上述参数动态生成我的CI/CD管道。在我的CD阶段,我通过了以下变量组: variables: - group: ${{ variables['Build.DefinitionName'] }}_MS_${{env.key}} - group

我有一个CI/CD多级模板,其中我的CD阶段依赖于我在yaml文件中提供的参数

管道指向Pipeline.yml

 servers:
  DEV:
  - srv-apimgmt37p
在我的模板中,我有一个检查服务器并传递值的循环,因此它可以根据上述参数动态生成我的CI/CD管道。在我的CD阶段,我通过了以下变量组:

variables:
  - group: ${{ variables['Build.DefinitionName'] }}_MS_${{env.key}}
  - group: DevSecOps_${{ variables['Build.DefinitionName'] }}_MS_${{env.key}}
在其中一个组中,我有一个变量,它是存储在安全文件中的文件名。回到我的CD模板,我有一个下载安全文件任务,该任务将使用名为$(test)的组中变量的名称下载安全文件


问题是,当管道开始运行时,它会首先尝试下载安全文件,但找不到它,因为它还不知道$(test)的值。在这种情况下,作为最佳实践,我应该做什么?我有点困惑于什么是好的解决方案。

下载安全文件任务是一项前期工作。如前所述,您可以尝试使用powershell下载安全文件

我能够使用RESTAPI下载安全文件,这是任务的 访问令牌和应用程序/八位字节流的接受头。我 已启用“允许脚本访问OAuth令牌”。这里是我的task.json 正在使用名为“secureFile”的secureFile

我正在使用“$(Build.QueuedById)”获取生成任务中的用户id, 但老实说,我不认为你们在那个里用什么弦很重要

如果您没有Accept头,那么您将为其返回JSON元数据 您正在尝试下载的文件


我决定在驻留在repo中的yaml文件中添加一个参数。因此,在我的模板中,我使用任务本身

- ${{ if parameters.keytab[env.key] }}:
   - task: DownloadSecureFile@1
     name: kafkakeytab
     displayName: 'Download kafka keytab'
     inputs:
        secureFile: ${{parameters.keytab[env.key]}}
        retryCount: 5
在我的YAML文件中,我只引用了这样一个参数:

keytab:
  DEV: bobbobob.keytab
  UAT: blablauat.keytab

这意味着如果我不传递这个参数,管道将不会在管道中包含任务,这正是我想要的。这样,我就不必创建自己的Powershell任务来尝试实现这一点

你查过我的答复了吗?有帮助吗?
- ${{ if parameters.keytab[env.key] }}:
   - task: DownloadSecureFile@1
     name: kafkakeytab
     displayName: 'Download kafka keytab'
     inputs:
        secureFile: ${{parameters.keytab[env.key]}}
        retryCount: 5
keytab:
  DEV: bobbobob.keytab
  UAT: blablauat.keytab