问题描述
使用Azure Devops 2019 Server(本地)
因此,我希望仅在IsServiceInstalled
变量为0时运行名为“ Install”的无代理作业,才能运行。我只能在同一作业(代理)中使用此变量,而不能在其他作业中使用此变量。 (无代理)。
无论我做什么,我都会收到一条异常声明:
Exception Message: Unrecognized value: 'dependencies'. Located at position 21 within expression: and(succeeded(),eq(<whatever i try to put here>,0))
设置变量的代码:
#Sets IsServiceInstalled to determine if service must be installed or updated
Get-Service "$(RabbitMQServiceName)" -ErrorAction SilentlyContinue
if ($?) {
echo "##vso[task.setvariable variable=IsServiceInstalled;isOutput=true]1"
} else {
echo "##vso[task.setvariable variable=IsServiceInstalled;isOutput=true]0"
}
- 我知道我可以使用“依赖关系”。访问该变量。 Use the output variable from a job in a condition in a subsequent job。但是我没有命名Job的选项。
- 我使用
system.debug=true
运行了部署,并发现了[SYstem_JOBNAME] --> [__default]
-因此,我尝试使用and(succeeded(),eq(dependencies.__default.Outputs['IsServiceInstalledTask.IsServiceInstalled'],0))
进行设置-是的,我收到了例外情况Unrecognized value: 'dependencies'
-并不奇怪我从未指定依赖项,也看不到在UI中的什么位置。 - 我没有设置Job Name的选项,因此我尝试设置在调试日志中找到的各种值(__default是我希望从中获取输出变量的Jobname):
Stage_cb7edb91b40b4747845ae3564bf62723_2_9.Phase_1.__default...
,{{1 }}或Phase_1.__default...
无论我尝试什么,都会遇到相同的无法识别的值异常。
解决方法
写一个问题的好处是,我在官方文档中找到了答案:不支持在经典管道中。
让我引用:
使用任务中的输出变量
一些任务定义了输出变量,您可以在下游步骤,作业和阶段中使用它们。在YAML中,您可以使用依赖项来跨作业和阶段访问变量。
在同一作业中使用输出
在“输出变量”部分中,为生产任务指定一个参考名称。然后,在下游步骤中,可以使用$(。)形式引用输出变量。
在其他作业中使用输出
您必须使用YAML消耗输出
在Use output variables from tasks中,然后点击“经典标签”