【问题标题】:Dynamic jobs based on the number of directories基于目录数量的动态作业
【发布时间】:2021-09-25 16:26:53
【问题描述】:
是否可以在 Azure DevOps 管道中创建动态作业?
我有一个场景,其中我有多个用于部署的目录,目录的数量将是动态的(例如:它可以有 1 个应用程序进行部署,也可以有很多)。我想要做的是创建一个动态数量的作业,其中它应该为每个目录运行cd app && cf push。
deployments/
├── app1
│ ├── app.jar
│ └── manifest.yml
├── app2
│ ├── app.jar
│ └── manifest.yml
└── app3
| ├── app.jar
| └── manifest.yml
【问题讨论】:
标签:
azure-devops
azure-pipelines
azure-pipelines-yaml
【解决方案1】:
您可以尝试使用矩阵配置来处理:
您要做的是构建代表您的文件夹结构的变量,然后将其作为配置传递:
jobs:
- job: JobA
steps:
- pwsh: |
$json="{'job1': {'Work': 'work1'}, 'job2': {'Work': 'work2'}}"
Write-Host "##vso[task.setvariable variable=targets;isOutput=true]$json"
name: setTargets
- script: echo $(setTargets.targets)
name: echovar
- job: buildSrc
dependsOn: JobA
displayName: Build source
strategy:
matrix: $[ dependencies.JobA.outputs['setTargets.targets'] ]
variables:
targets: $[ dependencies.JobA.outputs['setTargets.targets'] ]
steps:
- pwsh: Write-Host "${{ convertToJson(variables) }}"
displayName: 'Print all variables via expression'
所以你会得到这个:
请注意,如果您想使用阶段,那么您可能需要不同的语法来访问输出变量。