我正在寻找用于动态运行 Azure 管道的体系结构解决方案。假设我将有一个包含有关各种实体的信息的数据库。每个实体都拥有执行特定软件所需的基本信息。实体的数量将随着时间的推移而增加。因此,我想创建一个从数据库读取数据的管道(这是一个简单的步骤),然后根据该信息生成适当数量的作业。这是因为每个实体都需要在单个虚拟机上运行。所有数据都是可重复的。
我最初的想法是创建一个新的 YAML 模板文件,然后在第一个管道中覆盖它以触发适当的操作。然而,这种方法似乎有点不优雅,我对其有效性感到担忧。
有人遇到过类似的情况吗?不幸的是,由于可以同时执行的管道数量有限,我正在寻求解决方案。
最佳答案
恐怕我们无法通过单一 Pipeline 来满足您的需求。
获取实例数量和设置Pipeline中作业数量的步骤不能同时完成。
根据您的要求,我建议您可以使用两个管道来实现此目的。一个管道用于获取实例的数量,并通过 Rest API 将值传递到另一管道:Runs - Run Pipeline ,另一个使用对象类型 parameters循环所有实例并设置作业编号。
请引用以下步骤:
对于获取实例数量的管道,您可以获取所有实例名称并将它们传递给另一个管道:
例如:
$token = "PAT"
$url="https://dev.azure.com/{orgname}/{projectname}/_apis/pipelines/{PipelineID}/runs?api-version=5.1-preview"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$JSON = @'
{
"resources": {
"repositories": {
"self": {
"refName": "refs/heads/master"
}
}
},
"templateParameters": {
"instances":"[instance1,instance2,instance3]"
},
}
'@
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Post -Body $JSON -ContentType application/json
对于设置作业的管道,您可以定义对象参数并循环所有值。
例如:
pool:
vmImage: ubuntu-20.04
parameters:
- name: instances
type: object
default: []
jobs:
- ${{ each instance in parameters.instances }}:
- job:
steps:
- script: echo ${{ instance }}
结果:
当我们将 3 个实例传递到管道时,它将创建 3 个作业。
您还可以引用my another ticket .
关于azure - 动态创建管道中特定作业的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77265923/