【问题标题】:VSTS Build variables update not working at queue new buildVSTS 构建变量更新在队列新构建中不起作用
【发布时间】:2018-07-16 17:31:22
【问题描述】:

以下是我编写的变量声明和 power shell 脚本,用于在新构建队列中更新构建变量

声明:

Power shell 脚本:

$fileData = Get-Content -Path C:\builds\agent\PreviousRevisionUpdate.txt
$temp=$fileData[1]

##vso[task.setvariable variable=ActualRevision;]$temp
Write-Host "$temp - $env:ActualRevision"

输出:

2018-02-06T15:29:19.6035251Z ##[section]Starting: Actual Build Number Update
2018-02-06T15:29:19.6035251Z ==============================================================================
2018-02-06T15:29:19.6035251Z Task         : PowerShell
2018-02-06T15:29:19.6035251Z Description  : Run a PowerShell script
2018-02-06T15:29:19.6035251Z Version      : 1.2.3
2018-02-06T15:29:19.6035251Z Author       : Microsoft Corporation
2018-02-06T15:29:19.6035251Z Help         : [More Information](https://go.microsoft.com/fwlink/?LinkID=613736)
2018-02-06T15:29:19.6035251Z ==============================================================================
2018-02-06T15:29:19.6095263Z ##[command]. 'C:\builds\agent\_work\_temp\dd262af4-0863-4f8d-a14e-1d9ea50b4c72.ps1' 
2018-02-06T15:29:20.1186281Z 11 - 1
2018-02-06T15:29:20.1386321Z ##[section]Finishing: Actual Build Number Update

从上面的输出中,它仍然将变量值显示为“1”而不是“11”。

下一个任务 - 更新程序集信息 -> 我没有得到更新的值。

我错过了什么吗?请帮帮我。

【问题讨论】:

  • ActualRevision 是您在构建定义的变量选项卡中设置的变量吗?
  • @DenverDev 是的。

标签: tfs azure-devops azure-pipelines-build-task


【解决方案1】:

是的,您遗漏了一些重要的东西,实际上 值已更新。但是,它只能用作以下任务,而不是您更新的任务,这就是为什么您的 powershell 脚本的输出仍将变量值显示为“1”而不是“11”的原因。

在taskcontext的变量服务中设置一个变量。第一个任务 可以设置一个变量,以下任务可以使用 变量。 变量作为一个变量暴露于以下任务 环境变量。

来源链接:Logging Commands

对于测试,您可以在更新构建变量的任务之后添加一个 powershell 脚本,如下所示:

Write-Host "After: - $env:ActualRevision"

从你可以看到的结果来看,ActualRevision 的值在以下任务中已更改为 11。


更新:

我的脚本:

$temp=11
Write-Host "Before: $temp - $env:ActualRevision"


Write-Host ##vso[task.setvariable variable=ActualRevision;]$temp

Write-Host "After: $temp - $env:ActualRevision"

测试脚本(另一个任务):

Write-Host "After: - $env:ActualRevision"

【讨论】:

  • 实际上我只在下一个任务中使用它,即将程序集信息任务项更新为 '$(ActualRevision)'
  • @nag 是作为环境变量使用的,有没有试过$env:ActualRevision等其他格式?您是否使用了一些 3-rd 方扩展,不确定他们将如何使用和扩展变量?如果您使用自己的 powershell 脚本设置程序集信息,结果是什么?示例:Version your assemblies 供您参考。
  • 是的,我尝试了 $env:ActualRevision 并且它给出了类似“不是整数值”的错误,如果我使用 $(ActualRevision) 给出的结果为“1”。我正在使用 VSTS“更新程序集信息”内置任务。你能检查一下我编辑的帖子,我在 power shell 脚本之后添加了下一个任务的快照
  • @nag :) 我的 VSTS 任务中没有这样的内置任务,你在用这个吗? marketplace.visualstudio.com/…他说应该Must be a numeric value.我会建议你直接使用powershell脚本来做这个。构建变量中环境变量的概念请参考docs.microsoft.com/en-us/vsts/build-release/concepts/…。在这种情况下,您的使用似乎更像是从变量到变量(任务的修订)可能不起作用。
  • 是的。我正在使用您在链接中提供的相同任务。实际上,仅基于变更集更改,我才能增加版本中的修订号,这就是为什么我添加了此任务并使用 powershell 更新临时文件中的修订号并在队列时间更新 env 变量以更新我的程序集。
【解决方案2】:

你应该可以使用:$env:ActualRevision = $temp

Powershell 脚本

$temp=123
Write-Host "Before: $temp - $env:ActualRevision"

$env:ActualRevision = $temp
Write-Host "After: $temp - $env:ActualRevision"

VSTS 输出

Task         : PowerShell
Description  : Run a PowerShell script
Version      : 1.2.3
Author       : Microsoft Corporation
Help         : [More Information](https://go.microsoft.com/fwlink/?LinkID=613736)
==============================================================================
. 'D:\a\1\s\test.ps1'
Before: 123 - 2
After: 123 - 123

【讨论】:

  • 变量已更新,但当我在下一步“更新程序集信息”任务中使用此变量时,我仍将值设为“1”。我已经更新了上面的查询,请检查。
【解决方案3】:

您需要输出任务记录命令。所以powershell脚本的代码应该是:

Write-Host "##vso[task.setvariable variable=ActualRevision;]$temp"

然后您可以在以下任务中使用它。

【讨论】:

    猜你喜欢
    • 2019-04-10
    • 1970-01-01
    • 2020-03-30
    • 2016-09-11
    • 2016-09-18
    • 2018-11-21
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多