我刚刚开始使用 azure 管道。我们希望不再使用 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.读取String文件,并将字符串拆分成yaml上的数组
创建 yaml 构建并添加任务电源 shell。我们还可以使用扩展名 Replace Tokens更新文件的值
$ourfiles = Get-Content "file path"
Write-Output $ourfiles
$CharArray =$ourfiles.Split(" ")
$CharArray
2.我们也可以在yaml中使用each,请引用这个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
希望对你有帮助。
关于azure - 提供数组作为 devops 管道的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62934693/