我有一个azure管道,它维护一个保存项目名称的变量-让我们假设parameters.projects
保存projectA, projectB, projectC
我希望在每个项目上执行一个foreach循环并执行一个操作。
我目前使用
- ${{ each Project in parameters.projects}}:
- task: PowerShell@2
displayName: "operation on [${{ Project }}]."
inputs:
targetType: 'inline'
workingDirectory: $(System.DefaultWorkingDirectory)
script: |
New-Item -Path '$(Build.ArtifactStagingDirectory)${{ Project }}' -ItemType Directory
....
在上面的例子中,foreach参数(迭代值)是azure的,这意味着它将为管道中的每个项目生成一个任务。
我希望运行类似于…的东西
- task: PowerShell@2
displayName: "operation on [${{ Project }}]."
inputs:
targetType: 'inline'
workingDirectory: $(System.DefaultWorkingDirectory)
script: |
foreach ($Project in ${{ parameters.projects }})
{
New-Item -Path '$(Build.ArtifactStagingDirectory)${{ Project }}' -ItemType Directory
....
}
但是我不确定语法,也找不到有用的解释/例子。
正确的语法是什么?还有一个描述网页也很有用。
运行时参数让您可以更好地控制哪些值可以传递给管道。使用运行时参数,您可以:
在运行时为脚本和任务提供不同的值控制参数类型、允许的范围和默认值使用模板表达式动态选择作业和阶段
所以,你当前的脚本是正确的语法。
我测试了对象类型参数;不能在PowerShell任务中使用。
您可以尝试使用字符串类型参数,并将字符串分割为for循环。
YAML:
parameters:
- name: projects
type: string
default: project1;project2
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
# Write your PowerShell commands here.
$prjs = "${{parameters.projects}}"
$projects = $prjs -Split ";"
foreach($project in $projects){
New-Item -Path '$(Build.ArtifactStagingDirectory)$project' -ItemType Directory
}
有关更多信息,您可以参考运行时参数。