是否可以在构建步骤中设置VSTS构建变量,以便可以在后续构建步骤中使用该值?

时间:2015-10-01 07:26:09

标签: azure-devops azure-pipelines

我目前正在使用Build in Visual Studio Team Services(是Visual Studio Online),并且希望能够在Build Step中设置Build变量,以便可以在后续的Build Step中使用新值。

显然你可以在Build开始之前设置它,但是我希望在后续的Build Step中绑定变量。

这可能吗?enter image description here

4 个答案:

答案 0 :(得分:22)

在脚本内部,您可以通过在ps1中发出以下内容来更新变量

"##vso[task.setvariable variable=testvar;]testvalue"

然后,您可以使用$(testvar)

将变量传递到下一个脚本

答案 1 :(得分:6)

API中的这个文档讨论了您可以使用的##vso命令。

不要忘记将system.debug设置为true。似乎有一个缓存stdout的错误因此,所有##vso都无效。

https://github.com/Microsoft/vso-agent-tasks/blob/master/docs/authoring/commands.md

答案 2 :(得分:1)

您可以创建一个powershell脚本,并将其作为构建任务引用。 然后在您的powershell脚本中添加以下内容:

"##vso[task.setvariable variable=key]value"

在完成所有任务后,您可以将变量读作$(键)。 如果要保护变量,请使用:

"##vso[task.setvariable variable=secretVar;issecret=true]value"

然后在下一个任务中将其用作$(secretVar)。

答案 3 :(得分:0)

我发现此链接有帮助:https://docs.microsoft.com/en-us/azure/devops/pipelines/scripts/logging-commands?view=azure-devops&tabs=powershell

这具有您可以执行的操作的完整选项:https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch

您可以在任务之间重用设置变量,也可以在任务之间重用。我在舞台上找不到任何东西。

总结:

jobs:

# 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