Azure devops 在矩阵作业中访问输出变量

Azure devops 在矩阵作业中访问输出变量,azure-devops,azure-pipelines,azure-devops-server-2019,Azure Devops,Azure Pipelines,Azure Devops Server 2019,我正在矩阵作业A中生成输出变量: -作业:A 战略: 矩阵: 无杆: 环境:测试 产品: 环境:prod 步骤: -pwsh:写入主机“##vso[task.setvariable=Hostname;isOutput=true]'stuffrom$(环境)' 名称:OutputVariable 现在,我需要在各自工作的后续矩阵策略中访问它们: -作业:B 德彭森:A 战略: 矩阵: 无杆: 环境:测试 产品: 环境:prod 步骤: -pwsh:Write Host在这里如何使用作业A的输出变

我正在矩阵作业A中生成输出变量:

-作业:A
战略:
矩阵:
无杆:
环境:测试
产品:
环境:prod
步骤:
-pwsh:写入主机“##vso[task.setvariable=Hostname;isOutput=true]'stuffrom$(环境)'
名称:OutputVariable
现在,我需要在各自工作的后续矩阵策略中访问它们:

-作业:B
德彭森:A
战略:
矩阵:
无杆:
环境:测试
产品:
环境:prod
步骤:
-pwsh:Write Host在这里如何使用作业A的输出变量?

您需要映射输出变量,然后才能使用它们。您可以这样做:

  jobs:
  - job: A
    strategy:
     matrix:
      nonprod:
        environment: test
      prod:
        environment: prod
    steps:
      - pwsh: Write-Host "##vso[task.setvariable variable=Hostname;isOutput=true]'StuffFrom$(environment)'"
        name: OutputVariable
  - job: B
    dependsOn: A
    variables:
        varFromAprod: $[ dependencies.A.outputs['prod.OutputVariable.Hostname'] ]
        varFromAnonprod: $[ dependencies.A.outputs['nonprod.OutputVariable.Hostname'] ]
    strategy:
     matrix:
      nonprod:
        environment: test
      prod:
        environment: prod
    steps:
      - pwsh: Write-Host "$(varFromAprod)"
        name: PrintVariableProd
      - pwsh: Write-Host "$(varFromAnonprod)"
        name: PrintVariableNonprod

您可以找到更多信息。

您需要映射输出变量,然后才能使用它们。您可以这样做:

  jobs:
  - job: A
    strategy:
     matrix:
      nonprod:
        environment: test
      prod:
        environment: prod
    steps:
      - pwsh: Write-Host "##vso[task.setvariable variable=Hostname;isOutput=true]'StuffFrom$(environment)'"
        name: OutputVariable
  - job: B
    dependsOn: A
    variables:
        varFromAprod: $[ dependencies.A.outputs['prod.OutputVariable.Hostname'] ]
        varFromAnonprod: $[ dependencies.A.outputs['nonprod.OutputVariable.Hostname'] ]
    strategy:
     matrix:
      nonprod:
        environment: test
      prod:
        environment: prod
    steps:
      - pwsh: Write-Host "$(varFromAprod)"
        name: PrintVariableProd
      - pwsh: Write-Host "$(varFromAnonprod)"
        name: PrintVariableNonprod

您可以找到更多信息。

根据@Shayki Abramczyk的回答,我最终采用了以下方法:

作业:
-工作:A
战略:
矩阵:
无杆:
环境:测试
产品:
环境:prod
步骤:
-pwsh:写入主机“##vso[task.setvariable=Hostname;isOutput=true]'stuffrom$(环境)'
名称:OutputVariable
-工作:B
德彭森:A
变量:
varFromAprod:$[dependencies.A.outputs['prod.OutputVariable.Hostname']]
varFromAnonprod:$[dependencies.A.outputs['nonprod.OutputVariable.Hostname']
战略:
矩阵:
无杆:
环境:测试
主机名:$(varFromAnonprod)
产品:
环境:prod
主机名:$(varFromAprod)
步骤:
-pwsh:|
此作业的写入主机主机名为$Hostname

根据@Shayki Abramczyk的回答,我最终采用了以下方法:

作业:
-工作:A
战略:
矩阵:
无杆:
环境:测试
产品:
环境:prod
步骤:
-pwsh:写入主机“##vso[task.setvariable=Hostname;isOutput=true]'stuffrom$(环境)'
名称:OutputVariable
-工作:B
德彭森:A
变量:
varFromAprod:$[dependencies.A.outputs['prod.OutputVariable.Hostname']]
varFromAnonprod:$[dependencies.A.outputs['nonprod.OutputVariable.Hostname']
战略:
矩阵:
无杆:
环境:测试
主机名:$(varFromAnonprod)
产品:
环境:prod
主机名:$(varFromAprod)
步骤:
-pwsh:|
此作业的写入主机主机名为$Hostname

矩阵也接受包含字符串化JSON对象的运行时表达式。例如:

作业:
-工作:发电机
步骤:
-bash:echo“##vso[task.setVariable=legs;isOutput=true]{'a':{'myvar':'a'},'b':{'myvar':'b'}”
名称:mtrx
#这将扩展到矩阵
#a:
#myvar:A
#b:
#myvar:B
-工作:跑步者
德彭森:发电机
战略:
矩阵:$[dependencies.generator.outputs['mtrx.legs']]
步骤:
-脚本:echo$(myvar)#根据运行的是哪一条腿,回声A或B
请点击此处:


矩阵也接受包含字符串化JSON对象的运行时表达式。例如:

作业:
-工作:发电机
步骤:
-bash:echo“##vso[task.setVariable=legs;isOutput=true]{'a':{'myvar':'a'},'b':{'myvar':'b'}”
名称:mtrx
#这将扩展到矩阵
#a:
#myvar:A
#b:
#myvar:B
-工作:跑步者
德彭森:发电机
战略:
矩阵:$[dependencies.generator.outputs['mtrx.legs']]
步骤:
-脚本:echo$(myvar)#根据运行的是哪一条腿,回声A或B
请点击此处:


我可能应该更强烈地强调,我需要在各自的作业中使用每个变量,也就是说,我需要作业A的输出nonprod专门用于jon B的nonprod,我可以通过一些简单的if语句来了解如何在powershell任务中实现这一点,但感觉应该有一个更优雅的解决方案吗?@AurimasN。我试图使变量分别适用于矩阵,但没有成功。如果你能成功,请在此更新:)我已经将我下面的帖子编辑成比在pwsh任务中使用if语句更清晰的版本。我可能应该更强烈地强调,我需要在各自的作业中使用每个变量,也就是说,我需要作业a非棒的输出专门用于jon B的非棒,我可以通过一些简单的if语句来了解如何在powershell任务中实现这一点,但感觉应该有一个更优雅的解决方案。我试图使变量分别适用于矩阵,但没有成功。如果您成功,请在此处更新:)我已将下面的帖子编辑为比在pwsh任务中使用if语句更干净的版本。看起来很有希望,但如何扩展此功能以在generator中实际运行两个并行作业,从而生成这些输出,而不是对其进行硬编码?您能详细说明吗?您希望如何生成输出?例如,我将在作业A中创建虚拟机,一个用于测试,另一个用于并行生产,我将输出它们的名称,然后在作业B中使用它们并行地对每个虚拟机执行一些操作。看起来很有希望,但如何将其扩展到在生成器中实际运行两个并行作业来生成这些输出,而不是对它们进行硬编码呢?您能详细说明一下吗?您希望如何生成输出?例如,我将在作业A中创建虚拟机,一个用于测试,另一个用于并行生产,我将输出它们的名称,然后在作业B中使用它们并行地对每个虚拟机执行一些操作。似乎您已经找到了解决方案。你可以,这对其他社区成员有益