如何在Azure devops Powershell@2任务中编写构建变量的foreach循环? &g



我有一个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
}

有关更多信息,您可以参考运行时参数。

相关内容

  • 没有找到相关文章

最新更新