2017-07-12 37 views
-1

技術的相關信息:與2017年VS無法使用PowerShell在TFS改變可變vnext

TFS 2017年(15.112.26307.0)我有一個在我的設置爲「測試」默認值的過程稱爲的testvar變量。

在我的構建過程中,我有一個調用腳本的PowerShell任務。 我想改變的testvar的價值,所以在我的劇本,我有這些行:

echo $Env:TestVar 
$newValue = "NewValue" 
Write-Host ("##vso[task.setvariable variable=TestVar;]$newValue") 
echo $Env:TestVar 

然而,在我的生成輸出,該值不會改變:

Test 
Test 

我找了任何與vsts-tasks命令有關的問題,但我什麼都沒發現

在語法中是否有任何問題?

編輯:經過測試,如果我在另一個任務中打印它,變量會被修改。

但是,我想設置自定義源標籤。

enter image description here

源標籤由可變ProductBuildVersionNum設置。

此變量由構建過程上的腳本修改。

在構建結束時,標籤集是變量的初始值。

有沒有什麼辦法以編程方式設置源標籤或強制構建過程使用新的變量值?

+0

您的'寫主機'行不會改變它只是將文本輸出到控制檯。你不能只是'$ Env:TestVar = $ newValue'? –

+0

您可以使用Write-Host調用日誌記錄命令,如https://github.com/Microsoft/vsts-tasks/blob/master/docs/authoring/commands中所述。md,而且,我想更改變量值並在構建過程上下文中保留其值。 – Zysce

+0

有趣!我的猜測是變量'$ newValue'不能被這個任務訪問,但是我希望它變成空白。如果你做了Write-Host(「## vso [task.setvariable variable = TestVar;]'NewValue'」)' –

回答

1

當您更改變量時,它將對以下步驟有效。所以你只需要在這個之後使用另一個PowerShell任務(如你發現的那樣),你會發現變量TestVar的值更改爲NewValue

在標籤源步驟中使用變量作爲標籤格式,似乎無法檢測到更新變量的值。我創建了一個問題Why does label source step not use the modified variable's value which defined in label format,你可以跟進。

就目前來說,解決辦法是更新變量$(ProductBuildVersionNum)的版本號,如果你不關心完成構建$(Build.BuildNumber)的名稱被改變。步驟如下:

  1. 在存儲庫選項卡,更改標籤格式作爲$(Build.BuildNumber)
  2. 添加PowerShell的任務後,你當前的PowerShell任務(修改變量值),與日誌記錄命令:

    Write-Host ("##vso[build.updatebuildnumber]$(ProductBuildVersionNum)")