【发布时间】:2021-09-09 06:49:36
【问题描述】:
我现在在这方面花了很多时间,但似乎无法做到这一点,所以需要寻求建议。
我有一个 GitHub 存储库,其中包含一系列 ZIP 文件。对于我想在 DevOps 中执行模板的每个 Zip 文件,可能有 1 个,可能有 10 个。对于每个文件,我想执行相同的检查。
我编写了一个 PowerShell 任务,它扫描并收集 zip 文件列表。我花了相当多的时间尝试使用 OutPut 变量和变量,但您似乎根本无法使用 Azure Pipelines 中的数组。
steps:
- ${{ each var in variables }}:
- task: PowerShell@2
displayName: 'Checking variables ${{ var.key }}'
inputs:
targetType: Inline
script: |
Write-Host ${{ var.name }}
Write-Host ${{ var.key }}
Write-Host ${{ var.value }}
Write-Host "${{ convertToJson(var) }}"
我能够遍历管道中的所有现有变量,但似乎任务变量未添加到此列表中?
Write-Host "##vso[task.setvariable variable=filePath;isOutput=true]$YamlVar.FullName"
使用上面的 task.setvariable 我可以设置和访问一个变量,但它是一个单一的字符串,显然要循环多次模板并执行与 ${{ each 相同的步骤变量中的 var }}: 结构。
还设法编写了 variables.yml 并将其添加到工件中,但我似乎无法找到一种方法来访问我的新工件以潜在利用。
- job: B
dependsOn: A1
pool:
vmImage: windows-latest
variables:
- template: ./variables.yml
steps:
- ${{ each var in variables }}:
- task: PowerShell@2
displayName: 'Checking variables ${{ var.key }}'
inputs:
targetType: Inline
script: |
Write-Host ${{ var.name }}
Write-Host ${{ var.key }}
Write-Host ${{ var.value }}
Write-Host "${{ convertToJson(var) }}"
更新
这是迄今为止的壁橱答案,但使用时似乎。
- ${{ each var in variables }}:
变量或参数没有被处理。因此它被直接解释为 Micro $(allfiles) 而不是扩展和利用。
https://stackoverflow.com/a/59451690/16318957
如果我可以知道如何将我的 .yml 工件添加到构建中,然后引用它会工作,但似乎我无法在尚未执行下载阶段的步骤中直接引用模板。
这将允许我创建一个带有硬编码参数和变量的模板文件,然后发布该文件并使用该工件执行正确数量的步骤。
尝试下载我的工件时,我没有收到任何文件。
更新
我已经解决了这个问题,我基本上使用 DevOps API 将对象数组传递到模板中以调用单独的管道。我运行一个 PowerShell 脚本,传入所需的变量。
- task: PowerShell@2
inputs:
filePath: './PowerShell/deployment.ps1'
arguments: '-variable "TEST" -step "TEST_DEPLOYMENT" -env "TEST" -pat "$(pat)"'
然后基本上调整 JSON 变量并使用您的数组列表从 API 调用管道。您的 JSON 需要利用对象作为 JSON 文本。
$JSON = @'
{
"variables":{
"file1":{
"isSecret":false,
"value":"test11"
},
"file2":{
"isSecret":false,
"value":"test21"
}
},
"templateParameters":{
<zipfilefilenameshere>,
}
}
'@
然后使用传递您的对象数组的 API 触发管道。
uripipeline = "https://dev.azure.com/$($org)/$($proj)/_apis/pipelines/$($id)/runs?api-version=6.0-preview.1"
当您发送对象时,它需要像 JSON 文本一样结构化。
示例:
"[\"file1.zip\",\"file2.zip\"]"
【问题讨论】:
-
我又添加了 2 个类似的页面。似乎没有办法在回购中循环 x 数量的文件。对于我尝试过的所有不同的事情,我感觉如此接近,但又如此遥远。这是迄今为止最接近的stackoverflow.com/a/59451690/16318957
-
如果您设法解决了问题,可以回答您自己的问题 - 它将停止出现在“未回答”过滤器中,并帮助可能有类似问题的其他人找到答案。
标签: azure loops yaml azure-pipelines devops