Azure devops 如何使用管道变量有条件地运行生成代理作业?

Azure devops 如何使用管道变量有条件地运行生成代理作业?,azure-devops,Azure Devops,在Azure DevOps管道中,有一个基于管道变量有条件地运行任务的选项。这在“运行此任务>自定义条件”字段下处理,并使用以下语法: eq(variables['VarName'], 'Desired Value') 代理作业在“运行此作业>使用变量表达式的自定义条件”下有一个类似的条件执行字段 但是,当我使用与条件任务相同的语法时,结果总是计算为“false” 那么,如何有条件地运行代理作业 截图: 我找到了答案。不幸的是,不可能使用在生成执行期间修改的变量有条件地运行代理作业 要定义

在Azure DevOps管道中,有一个基于管道变量有条件地运行任务的选项。这在“运行此任务>自定义条件”字段下处理,并使用以下语法:

eq(variables['VarName'], 'Desired Value')
代理作业在“运行此作业>使用变量表达式的自定义条件”下有一个类似的条件执行字段

但是,当我使用与条件任务相同的语法时,结果总是计算为“false”

那么,如何有条件地运行代理作业

截图:


我找到了答案。不幸的是,不可能使用在生成执行期间修改的变量有条件地运行代理作业

要定义或修改脚本中的变量,请使用task.setvariable 日志记录命令请注意,更新的变量值的范围是 正在执行的作业,不会在作业或阶段之间流动。


我发现了答案。不幸的是,不可能使用在生成执行期间修改的变量有条件地运行代理作业

要定义或修改脚本中的变量,请使用task.setvariable 日志记录命令请注意,更新的变量值的范围是 正在执行的作业,不会在作业或阶段之间流动。


像这样的事情对我很有用:

- job: Job1
  steps:
  - powershell: |
      if (some condition)
      {
          Write-Host ("##vso[task.setvariable variable=RunJob2;isOutput=true]True")
      }

    name: ScriptStep
- job: Job2
  dependsOn: Create_Build_Matrix
  condition: and(succeeded(), eq(dependencies.Job1.outputs['ScriptStep.RunJob2'], 'True'))

像这样的事情对我很有用:

- job: Job1
  steps:
  - powershell: |
      if (some condition)
      {
          Write-Host ("##vso[task.setvariable variable=RunJob2;isOutput=true]True")
      }

    name: ScriptStep
- job: Job2
  dependsOn: Create_Build_Matrix
  condition: and(succeeded(), eq(dependencies.Job1.outputs['ScriptStep.RunJob2'], 'True'))
试试这个:

这一个允许您将变量从一个阶段/作业传递到同一发布管道中的另一个阶段/作业。我试过了,效果很好

此外,要运行此操作,您需要为发布管道授予一些权限。要允许在发布期间更新发布定义,您需要为项目集合生成服务配置发布权限管理发布。

尝试以下操作:

这一个允许您将变量从一个阶段/作业传递到同一发布管道中的另一个阶段/作业。我试过了,效果很好


此外,要运行此操作,您需要为发布管道授予一些权限。要允许在发布期间更新发布定义,您需要为项目集合生成服务配置发布权限管理发布。

您可以共享日志/屏幕截图吗?我刚试了试我的体形,这个条件对我也适用。可能是您的变量未正确更新。请检查您的变量是否正确更新我已将我的第一个代理作业设置为变量。在同一个作业中,我根据该变量有条件地运行任务。在下一个作业中,我尝试基于该变量有条件地运行整个作业,但它始终等于false。但是,我可以基于同一变量有条件地运行该作业中的各个任务。所以我知道变量正确地得到集合。我将相同的条件逻辑复制/粘贴到代理作业-但它不起作用。我稍后会挖一些日志。你能分享日志/截图吗?我刚试了试我的体形,这个条件对我也适用。可能是您的变量未正确更新。请检查您的变量是否正确更新我已将我的第一个代理作业设置为变量。在同一个作业中,我根据该变量有条件地运行任务。在下一个作业中,我尝试基于该变量有条件地运行整个作业,但它始终等于false。但是,我可以基于同一变量有条件地运行该作业中的各个任务。所以我知道变量正确地得到集合。我将相同的条件逻辑复制/粘贴到代理作业-但它不起作用。我将稍微挖掘一些日志。我认为这不完全正确-请参阅中的“设置多任务输出变量”一节。我将在我的答案中解决语法混乱的问题,但我认为我想要的仍然是不可能的。在该链接中,它表示“这不会更新环境变量,但会使新变量可用于同一作业中的下游步骤。”这就是问题所在-我希望有一个可跨代理作业编辑的变量。这在“从脚本设置作业范围的变量”小节中;下面是另一个小节,它显示了如何做你想做的事情(但是你必须使用YAML而不是设计师来实现它)。我认为这并不完全正确-请参阅中的“设置多任务输出变量”一节。我将在我的回答中解决语法混乱的问题,但我认为我想要的仍然是不可能的。在该链接中,它表示“这不会更新环境变量,但会使新变量可用于同一作业中的下游步骤。”这就是问题所在-我希望有一个可跨代理作业编辑的变量。这在“从脚本设置作业范围的变量”小节中;下面还有一个小节叫做右下角,它展示了如何做你想做的事情(但是你必须使用YAML而不是设计师来实现它)。