【发布时间】:2020-12-08 11:54:59
【问题描述】:
我有一个关于变量及其范围的问题。我想建立一个包含多个作业的管道,每个作业都包含相同的任务,我想为它们使用模板。 我也有我想在作业运行时操作的作业变量。由于 Job 是在模板中定义的,因此所有变量名称都是相同的。通常我使用以下命令来设置变量的新值。
Write-Output ("##vso[task.setvariable variable=job_variable1;]$newValue")
我真的不知道这是否会导致所有作业的所有变量都设置为 $newVariable 的内容,或者此日志记录命令是否只是设置当前作业的变量。
所有作业并行运行,如果这也会从其他作业中设置变量,则可能会对其他作业产生副作用。
我使用以下 yaml 管道测试了这个问题,据我所见,它看起来不错,并且在 BuildJob1 中设置的新值没有在 BuildJob2 中回显,但我真的不知道它是否是一个有效的测试。
trigger: none
jobs:
- job: BuildJob1
variables:
job_variable1: VariableFromJob1 # this is only available in BuildJob
steps:
- task: PowerShell@2
displayName: "Echo and set job variable"
inputs:
targetType: inline
script: '
echo "initial job variable";
echo "$(job_variable1)";
$newValue = "new Variable for VariableFromJob1";
Write-Output ("##vso[task.setvariable variable=job_variable1;]$newValue");
'
- task: PowerShell@2
displayName: "Echo new job variable"
inputs:
targetType: inline
script: '
echo "new job variable";
echo "$(job_variable1)";
'
- job: BuildJob2
variables:
job_variable1: VariableFromJob2 # this is only available in BuildJob
steps:
- task: PowerShell@2
displayName: "Echo and set job variable"
inputs:
targetType: inline
script: '
echo "initial job variable";
Start-Sleep -s 45;
echo "$(job_variable1)";
$newValue = "newJobValue from job 2";
Write-Output ("##vso[task.setvariable variable=job_variable1;]$newValue");
'
- task: PowerShell@2
displayName: "Echo new job variable"
inputs:
targetType: inline
script: '
echo "new job variable";
echo "$(job_variable1)";
'
在 Job2 中,我等了 45 秒以确保 Job1 中设置了作业变量,然后再打印其内容。
【问题讨论】:
标签: powershell azure-pipelines azure-pipelines-yaml