【问题标题】:How to conditionally run a build agent job with a pipeline variable?如何使用管道变量有条件地运行构建代理作业?
【发布时间】:2018-12-18 22:07:26
【问题描述】:

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

eq(variables['VarName'], 'Desired Value')

代理作业运行此作业下具有类似的条件执行字段 > 使用变量表达式的自定义条件

但是,当我使用与条件任务相同的语法时,结果总是评估为 'false'

那么我怎样才能有条件地运行一个代理作业

截图:

【问题讨论】:

  • 你能分享日志/截图吗?我刚刚尝试了我的构建并且条件有效。
  • 也适合我。可能是您的变量未正确更新。请检查您的变量是否正确更新
  • 我的第一个代理工作设置了变量。在同一个作业中,我有条件地根据该变量运行任务。在下一个作业中,我尝试根据该变量有条件地运行整个作业,但它始终等于 false。但是,我可以基于相同的变量有条件地在该作业中运行单个任务。所以我知道变量 get 正确设置。我将相同的条件逻辑复制/粘贴到代理作业 - 但它不起作用。我稍后会挖掘一些日志。

标签: azure-devops


【解决方案1】:

这样的事情对我有用:

- 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'))

【讨论】:

    【解决方案2】:

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

    From the Azure DevOps Pipeline documentation under Pipeline Variables:

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

    【讨论】:

    • 我认为这并不完全正确 - 请参阅 the docs 中的“设置多作业输出变量”部分。
    • 我会在我的答案中修复令人困惑的语法怪异,但我认为我想要的仍然是不可能的。在该链接中,它说“这不会更新环境变量,但它确实使新变量可用于同一作业中的下游步骤。”这就是问题所在 - 我想要一个可跨代理作业编辑的变量。
    • 这在“从脚本设置作业范围的变量”小节中;还有一个名为"Set a multi-job output variable" 的小节就在下面,它显示了如何做你想做的事(但你必须使用 YAML 而不是设计器来实现它)。
    【解决方案3】:

    试试这个:https://stefanstranger.github.io/2019/06/26/PassingVariablesfromStagetoStage/

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-08
      • 2020-12-04
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 2018-01-07
      • 1970-01-01
      相关资源
      最近更新 更多