我刚开始使用天蓝色管道。我们希望不再使用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部署任务?
谢谢 戴夫
答案 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
我希望它能为您提供帮助。