【问题标题】:YAML pipeline variable scopesYAML 管道变量范围
【发布时间】:2020-12-08 11:54:59
【问题描述】:

我有一个关于变量及其范围的问题。我想建立一个包含多个作业的管道,每个作业都包含相同的任务,我想为它们使用模板。 我也有我想在作业运行时操作的作业变量。由于 Job 是在模板中定义的,因此所有变量名称都是相同的。通常我使用以下命令来设置变量的新值。

Write-Output ("##vso[task.setvariable variable=job_variable1;]$newValue")

我真的不知道这是否会导致所有作业的所有变量都设置为 $newVariable 的内容,或者此日志记录命令是否只是设置当前作业的变量。

所有作业并行运行,如果这也会从其他作业中设置变量,则可能会对其他作业产生副作用。

我使用以下 yaml 管道测试了这个问题,据我所见,它看起来不错,并且在 BuildJob1 中设置的新值没有在 BuildJob2 中回显,但我真的不知道它是否是一个有效的测试。

trigger: none

jobs:
- job: BuildJob1
  variables:
    job_variable1: VariableFromJob1    # this is only available in BuildJob
  steps:
  - task: PowerShell@2
    displayName: "Echo and set job variable"
    inputs:
      targetType: inline
      script: '
      echo "initial job variable";
      echo "$(job_variable1)";
      $newValue = "new Variable for VariableFromJob1";
      Write-Output ("##vso[task.setvariable variable=job_variable1;]$newValue");
      '
  - task: PowerShell@2
    displayName: "Echo new job variable"
    inputs:
      targetType: inline
      script: '
      echo "new job variable";
      echo "$(job_variable1)";
      '
- job: BuildJob2
  variables:
    job_variable1: VariableFromJob2    # this is only available in BuildJob
  steps:
  - task: PowerShell@2
    displayName: "Echo and set job variable"
    inputs:
      targetType: inline
      script: '
      echo "initial job variable";
      Start-Sleep -s 45;
      echo "$(job_variable1)";
      $newValue = "newJobValue from job 2";
      Write-Output ("##vso[task.setvariable variable=job_variable1;]$newValue");
      '
  - task: PowerShell@2
    displayName: "Echo new job variable"
    inputs:
      targetType: inline
      script: '
      echo "new job variable";
      echo "$(job_variable1)";
      '

在 Job2 中,我等了 45 秒以确保 Job1 中设置了作业变量,然后再打印其内容。

【问题讨论】:

    标签: powershell azure-pipelines azure-pipelines-yaml


    【解决方案1】:

    只是为了进一步阐述你是正确的。从模板运行的作业是这些模板的副本,甚至大部分时间都可以在不同的代理上并行运行,因此他们不会知道将局部变量更改为作业。

    【讨论】:

      【解决方案2】:

      好的,我在文档中找到了答案。

      https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#set-a-job-scoped-variable-from-a-script

      因此该命令在作业中设置变量,不会出现并发问题。

      【讨论】:

        猜你喜欢
        • 2020-06-10
        • 1970-01-01
        • 2021-08-31
        • 2018-02-09
        • 1970-01-01
        • 2020-11-07
        • 2021-11-23
        • 2022-07-21
        • 2019-10-04
        相关资源
        最近更新 更多