Azure devops 如何在Azure构建管道中使用Powershell修改流程变量
我有一个测试步骤在我的管道中。我希望该步骤在计划运行时运行所有测试,但仅在手动或选通运行时运行受影响的测试。 为此,我将Azure devops 如何在Azure构建管道中使用Powershell修改流程变量,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我有一个测试步骤在我的管道中。我希望该步骤在计划运行时运行所有测试,但仅在手动或选通运行时运行受影响的测试。 为此,我将runOnlyImpactedTests值链接到一个流程变量,并尝试使用Powershell修改其值 我可以读取变量,但无法更改它。我有两个问题,但首先,这里是PS脚本 Write-Host "a ${Env:Parameters_runOnlyImpactedTests} b" Write-Host "##vso[task.setvariable variable=Param
runOnlyImpactedTests
值链接到一个流程变量,并尝试使用Powershell修改其值
我可以读取变量,但无法更改它。我有两个问题,但首先,这里是PS脚本
Write-Host "a ${Env:Parameters_runOnlyImpactedTests} b"
Write-Host "##vso[task.setvariable variable=Parameters.runOnlyImpactedTests]True"
Write-Host "c ${Env:Parameters_runOnlyImpactedTests} d"
#Build Reasons:
#https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2013/ff736208(v=vs.120)
if($Env:BUILD_REASON -eq "Schedule"){
Write-Host "Is Scheduled. Should run all tests"
Write-Host "##vso[task.setvariable variable=Parameters.runOnlyImpactedTests]False"
}
#gci env:
#gci variable:
# Use the environment variables input below to pass secret variables to this script.
及其产出
2019-11-04T18:32:37.5783531Z Génération du script.
2019-11-04T18:32:37.6377454Z a False b
2019-11-04T18:32:37.6408504Z ##[command]"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'D:\BuildsVnexAgents\Agt1-3348\_work\_temp\2fca26a4-3bb5-4d51-9d90-a29aa4c755b5.ps1'"
2019-11-04T18:32:37.9377454Z c False d
2019-11-04T18:32:37.9846229Z
我还尝试使用Parameters\u runOnlyImpactedTests
和Env:Parameters\u runOnlyImpactedTests
设置变量,但它们都给出相同的结果
我现在有两个问题:
这对你有用吗
${Env:Parameters_runOnlyImpactedTests} = $false
Write-Host "a ${Env:Parameters_runOnlyImpactedTests} b"
${Env:Parameters_runOnlyImpactedTests} = $true
Write-Host "c ${Env:Parameters_runOnlyImpactedTests} d"
输出:
2019-11-05T09:56:39.8505031Z a False b
2019-11-05T09:56:39.8513437Z c True d
${Env:Parameters\u runOnlyImpactedTests}
在其他管道任务中也应该可用。根据Fairoz的评论进行测试,当脚本中使用“##vso[task.setvariable=Parameters.runOnlyImpactedTests]true”
时,该变量的值的输出在同一任务中不会改变。修改后的值将在后续任务中正常输出
steps:
- powershell:
Write-Host " a $(Parameters_runOnlyImpactedTests) a "
"##vso[task.setvariable variable=Parameters_runOnlyImpactedTests]True"
Write-Host " b $(Parameters_runOnlyImpactedTests) b "
- powershell: Write-Host "c $(Parameters_runOnlyImpactedTests) c "
下一步您可能需要尝试第3行。根据文档,该值在任务完成后初始化。我也在为这个信息而努力。我发现它是有效的,但不是一直有效。我尝试在脚本中使用完全相同的行,顶部有注释,但失败了,然后没有注释,成功了。我必须使用几乎相同的脚本,唯一的区别是在YAML中,不工作的脚本在write host命令之前有一些空格。但至少请把它写下来作为一个答案,这样我就可以奖励你你的分数。我尝试过这个,虽然有些时候在工作中(值在下一个任务中更改),但其他时候没有。我还尝试更改ProcParam_runOnlyImpactedTests,得到了相同的结果。在所有情况下,无论显示的值是否已修改,测试任务都不会使用该值。也许我应该取消这个问题?很难给你答案。就我的经验而言,我的例子很有效。您使用的是
Azure DevOps服务
还是Azure DevOps服务器
?是否使用自托管代理?我想我们可以回答‘如果不能这样做,在实现我的目标时还有其他选择吗?’。