提供数组作为devops管道的参数

时间:2020-07-16 12:28:03

标签: azure azure-pipelines devops

我刚开始使用天蓝色管道。我们希望不再使用arm模板和参数文件手动部署Azure资源,而是通过devops管道来实现。

虽然使用单个模板和参数的json文件可以很容易地做到这一点,但我看不到处理多个文件的明智方法。

我已经看到了有关使用数组作为管道模板的参数的讨论-这可以工作,但是除了在管道yaml文件中手动设置参数数组之外,我看不到如何创建参数数组。

一个更有用的解决方案是通过从文本文件中读取其内容(我们可以在读取文件之前生成该文本文件),或者(更理想的情况是)通过引用包含json的回购中文件夹的目录列表它们共同的模板的参数文件。

yaml管道中的代码片段能够传回单个字符串变量,例如。

script: |
      # Get list of files in folder
      $fl =  get-childitem ./templates | select-object -expand name
      Write-output  "##vso[task.setvariable variable=fl]$fl"
      

但是所有产生的都是一个字符串,我无法分割。

类似地,我可以使用一段代码来动态创建文件列表-但同样,无法看到如何在管道中读取该文件。

有没有一种方法可以让我在devops管道中动态设置参数数组的内容,或者从文件中读取该数组?

还是我应该放弃并使用Powershell脚本编写整个内容,然后使用任务来运行该脚本,而不是尝试在devops中使用Azure部署任务?

谢谢 戴夫

1 个答案:

答案 0 :(得分:1)

1。读取String文件并将字符串拆分为Yaml上的数组

创建一个Yaml构建并添加任务电源外壳。我们还可以使用扩展名Replace Tokens来更新文件的值

$ourfiles = Get-Content "file path"
Write-Output $ourfiles

$CharArray =$ourfiles.Split(" ")
$CharArray

2。我们也可以在Yaml中使用它们,有关更多详细信息,请参阅此doc

模板文件:test.yml

parameters:
- name: InstanceArgs 
  type: object
  default: [] 
stages:
  - stage: deploy
    displayName: deploy
    jobs:
      - ${{ each arg in parameters.InstanceArgs }}:
        - deployment: ${{ arg.value }}
          displayName: ${{ arg.value }}
          environment: Development
          strategy:
            runOnce:
              deploy:
                steps:
                - script: echo Hello, world!

YAML构建

extends:
  template: test.yml
  parameters:
    InstanceArgs:  
      In1 : _1
      In2 : _2

我希望它能为您提供帮助。