我正在阅读这篇文章:https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=脚本中设置的经典%2批次号
Powershell脚本示例如下所示:https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=经典的%2Powershell#从脚本-1 设置作业操作变量
我假设"设置酱汁和秘密。酱汁变量"是一项任务,"读取变量"是另一项任务。并且这些参数作为任务参数传递。
如果是(也就是说,在一个powershell任务中设置的值可以在另一个powershell任务中使用(,那么,为什么要执行下面的部分(请参阅https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=使用变量作为任务输入的经典%2Powershell#(建议:
要将变量用作任务输入,该变量必须是输出变量,并且必须为生产任务提供一个引用名称。
本节(https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Batch#set-a-multi-job-output-variable(说:
如果要使变量可用于未来的作业,则必须标记使用isOutput=true将其作为输出变量。
首先,您对的假设
"设置酱汁和秘密。酱汁变量"是一项任务,"阅读变量"是的另一项任务
是正确的。如果你在同一个任务中读取它,你会收到类似"{output variable name}"
可以识别的错误。
如果在同一个作业中使用变量,则在大多数情况下直接使用$()
与使用$(<ReferenceName>.<VariableName>)
相同,包括在一个代理作业中获取变量,而在另一个任务中未设置同名变量。但是,显然,$()
是一种最简单的方法。
-
1.如果在另一个任务中设置了同名变量
有时,您可能需要用不同的脚本执行相同的脚本条件,因此其结果可能具有相同的名称但值不同。在里面总之,您需要在不同的任务中使用相同的变量名。然后你需要执行下一个任务根据在不同状态下产生的值。
此时,使用
$(<ReferenceName>.<output VariableName>)
是更好的解决方案,以获得设置在哪个状态下的特定变量值。因为read操作只能获得最新的值分配 -
2.如果您想在不同的代理作业中使用此变量
在一些大型项目中,下一个代理作业需要使用设置在最后一个代理作业中(注意:这两个作业必须在同一管道中(。重新运行脚本以设置变量将增加时间这也会增加代码的成本验证。
在这种情况下,
$(<ReferenceName>.<output VariableName>)
是唯一一种可以实现这种场景。但是,到目前为止,这种方法只支持YAML模式。如果你使用经典编辑器来实现这个场景,你只能重写设置变量脚本。