【问题标题】:Visual Studio Online VSO): Can't set environment variables from a build taskVisual Studio Online VSO):无法从构建任务中设置环境变量
【发布时间】:2018-02-05 09:50:07
【问题描述】:

我一直在努力尝试跨任务更新构建任务变量,在 Visual Studio Online 的托管代理上运行。

根据:

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

在第一个 PS 脚本结束时,我尝试将变量保存在 env 中,以便后续任务从中受益:

Write-Host "##vso[task.setvariable variable=TEST;]$resourceNameTemplate"
Write-Host "Result: $env:TEST"
Write-Host "Result: $env:test"

输出显示它从未设置过。

2018-02-05T00:57:45.7295714Z ##[debug]Processed: ##vso[task.setvariable 
variable=TEST;]MYORG-MYAPP-MYBT-{RESOURCETYPE}
2018-02-05T00:57:45.7302525Z Result: 
2018-02-05T00:57:45.7309594Z Result: 

任何帮助,非常感谢。

【问题讨论】:

    标签: azure-devops


    【解决方案1】:

    你有错误的期望,只有后续任务才能访问该变量。 The documentation描述清楚:

    在taskcontext的变量服务中设置一个变量。第一个任务可以设置一个变量,后面的任务可以使用这个变量。 该变量作为环境变量公开给以下任务

    如果你分开...

    Write-Host "##vso[task.setvariable variable=TEST;]$resourceNameTemplate"
    Write-Host "Result: $env:TEST"
    Write-Host "Result: $env:test"
    

    ...在两个任务中,您应该会看到 TEST 已被设置为环境变量。

    【讨论】:

    • 哼。在两个任务中尝试了这个......没有得到预期的结果。第一个任务:2018-02-05T23:55:44.3476123Z ##[debug]Processed:##vso[task.setvariable variable=custom_task_vars_resourceNameTemplate;]MYORG-MYAPP-MYBT-{RESOURCETYPE} 第二个任务,读取它:write-host “custom.task.vars.resourceNameTemplate: $(custom.task.vars.resourceNameTemplate)” 但结果是:2018-02-05T23:55:44.9490223Z 检查变量是否已更新:2018-02-05T23:55:44.9515265 Z custom.task.vars.resourceNameTemplate: MYORG-MYAPP-{ENVID}-{BRANCHNAME}-{RESOURCETYPE} (对不起,文本修改)
    • 它是否有可能在运行构建任务的 VSO 托管代理上不可用?或者如果它最初有一个值,它不会更新该字段(例如:在队列时间设置?)
    • 啊。男人。明白了...我使用了一个带有点的 var 名称(custom.task.vars.foo)。这意味着我在我的 ps 脚本中使用破折号('custom_task_vars_foo')访问它。你必须设置它......用点(破折号最终出现在一个新变量中!)Duh。谢谢!
    • 很高兴你能成功。 VSTS 是一款功能强大且经过精心打磨的产品,但构建计划的编辑-构建-测试周期非常痛苦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 2014-01-21
    • 2011-02-08
    • 2019-04-04
    • 2011-03-04
    • 2015-10-11
    相关资源
    最近更新 更多