我们是否需要设置'isOutput = true'来将变量用作同一作业中任务的任务输入?

时间:2019-11-09 20:46:42

标签: azure-pipelines azure-pipelines-tasks

我正在阅读这篇文章:https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=classic%2Cbatch#set-in-script

此处显示的Powershell脚本示例:https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=classic%2Cpowershell#set-a-job-scoped-variable-from-a-script-1

我假设“设置调味料和调味料。调味料变量”是一项任务,而“读取变量”是另一项任务。并且参数作为任务参数传递。

如果是这样(也就是说-在一个Powershell任务中设置的值可以在另一个Powershell任务中使用),那么为什么下面的部分(请参见https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=classic%2Cpowershell#using-variables-as-task-inputs)建议:

  

为了使用变量作为任务输入,变量必须是   输出变量,并且必须为生产任务指定参考名称。

本节(https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#set-a-multi-job-output-variable)说:

  

如果要使变量可用于将来的工作,则必须标记   使用isOutput = true将其作为输出变量。

1 个答案:

答案 0 :(得分:0)

首先,您对

的假设
  

“设置酱汁和秘密。酱汁变量”是一项任务,“请阅读   变量”是另一项任务

是正确的。如果您在同一任务中阅读它,将会收到类似"{output variable name}"的错误。

如果在同一作业中使用变量,则在大多数情况下,直接使用$()与使用$(<ReferenceName>.<VariableName>)相同,包括在一个代理作业中获取变量并且未设置在另一个任务中具有相同名称的变量。但是,显然$()是最简单的方法。


  • 1。如果您在另一个任务中将变量设置为相同的名称。

    有时,您可能需要使用不同的脚本执行相同的脚本 条件,因此其结果可能具有相同的名称,但值不同。在 一个词,您需要通过使用以下命令在不同任务中设置不同的值 相同的变量名。然后您需要执行下一个任务 根据在不同状态下生成的值。

    目前,最好使用$(<ReferenceName>.<output VariableName>) 解决方案,以获取在哪个状态下设置的特定变量值。 因为 read 操作只能获取最新值 分配。

  • 2。如果您想使用此变量in different agent job

    在某些大型项目中,下一个代理作业需要使用设置的变量 在上一个代理作业中(注意:这两个作业必须在同一管道中)。 重新运行脚本以设置变量会增加时间 花费在构建上,这也会增加代码成本 验证。

    在这种情况下,$(<ReferenceName>.<output VariableName>)是唯一的方法 可以实现这种情况。

    但是,到目前为止,该方法仅支持YAML模式。如果使用经典编辑器来实现此方案,则只能重新编写 设置变量脚本。