如何在Azure发布管道中跨代理作业使用输出变量

3vpjnl9f  于 2023-02-05  发布在  其他
关注(0)|答案(2)|浏览(122)

在我的azure发布管道中,我有两个代理作业,一个是使用power-shell的sql部署,另一个是使用power-shell的kubernetes。如何在第一个代理作业中设置输出变量,并在第二个代理作业中使用该变量。

42fyovps

42fyovps1#

用途

Write-Output "##vso[task.setvariable variable=testvar;isOutput=true;]testvalue"

然后引用输出变量,就好像它存在于将来的任务中一样。

$(taskreference.testvariable)

可以在powershell脚本任务的输出部分设置任务引用名称:

但我看过相关文档后发现,似乎还没有跨职推荐信:

待办事项

我不确定我们将如何生成Job ref名称,因为此时我们没有作业链。
它应该是这样的:

{DefinitionName}_{JobName}

参见:Azure-Pipelines-Agent/docs/Outputvariable.md
因此,目前该变量仅在同一作业中有效。
看起来YAML构建确实已经支持跨阶段输出变量引用。
职位:

# Set an output variable from job A
- job: A
  pool:
    vmImage: 'vs2017-win2016'
  steps:
  - powershell: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true;]this is the value"
    name: setvarStep
  - script: echo $(setvarStep.myOutputVar)
    name: echovar

# Map the variable into job B
- job: B
  dependsOn: A
  pool:
    vmImage: 'ubuntu-16.04'
  variables:
    myVarFromJobA: $[ dependencies.A.outputs['setvarStep.myOutputVar'] ]  # map in the variable
                                                                          # remember, expressions require single quotes
  steps:
  - script: echo $(myVarFromJobA)
    name: echovar
8yoxcaq7

8yoxcaq72#

如何在Azure发布管道中跨代理作业使用输出变量
恐怕目前还没有办法直接跨代理作业使用输出变量。
Variables set via logging commands are not persistent between agent s有相关问题,可以跟进。
要解决此问题,您可以尝试以下解决方法

  • 在版本定义变量中定义变量。
  • 使用REST API(Definitions - Update)更新代理作业1中的版本定义变量的值。
  • 在下一个代理作业中使用版本定义变量的更新值。

有关使用REST API更新发布定义变量值的详细信息,您可以遵循以下票证:
如何从发布任务修改Azure DevOps发布定义变量?
希望这个有用。

相关问题