Dav*_*e F 7 azure devops azure-pipelines
我刚刚开始使用天蓝色管道。我们希望不再使用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"
Run Code Online (Sandbox Code Playgroud)
但所有这些产生的只是一个字符串,我无法将其拆分。
同样,我可以使用一段代码来动态创建文件列表 - 但同样,我无法看到如何在管道中读取它。
有没有一种方法可以让我在 DevOps 管道中动态设置参数数组的内容,或者从文件中读取数组?
或者我应该放弃并在 powershell 脚本中编写整个内容并使用任务来运行它,而不是尝试在 devops 中使用 azure 部署任务?
谢谢戴夫
1.读取String文件并将字符串拆分成yaml上的数组
创建 yaml 构建并添加任务电源 shell。我们还可以使用扩展Replace Tokens来更新文件的值
$ourfiles = Get-Content "file path"
Write-Output $ourfiles
$CharArray =$ourfiles.Split(" ")
$CharArray
Run Code Online (Sandbox Code Playgroud)
2.我们也可以在yaml中使用each,请参阅此文档以获取更多详细信息。
模板文件: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!
Run Code Online (Sandbox Code Playgroud)
YAML 构建
extends:
template: test.yml
parameters:
InstanceArgs:
In1 : _1
In2 : _2
Run Code Online (Sandbox Code Playgroud)
我希望它能帮助你。
| 归档时间: |
|
| 查看次数: |
21616 次 |
| 最近记录: |