TFS CI Build - Update custom define variable after build is succeed

谁说我不能喝 提交于 2019-12-06 02:24:34

问题


We had set up my TFS CI Build, and we're managing one variable for our purposes to maintaining versioning, We want to update after every success build, any idea how to do so?

I had written PowerShell script

param([Int32]$currentPatchVersion)
Write-Host "Current patch version "$currentPatchVersion
$NewVersion=$currentPatchVersion + 1
Write-Host "New patch version "$NewVersion
Write-Host ("##vso[task.setvariable variable=PackageVersion.Patch;]$NewVersion")

but it just applies on the fly.

I want's to apply it on setting permanently.


回答1:


"##vso[task.setvariable variable=PackageVersion.Patch;]$NewVersion" just set the variable value in the build process, it doesn't set the value in the build definition level. If you want to update the variable value in the build definition permanently, you can call the Rest API to set the value of the variables in the definition. Refer to following section for details:

Create a "testvariable" as example:

Create a Power Shell script with following code and upload it into source control:

[String]$buildID = "$env:BUILD_BUILDID"
[String]$project = "$env:SYSTEM_TEAMPROJECT"
[String]$projecturi = "$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"

$username="alternativeusername"
$password="alternativepassword"

$basicAuth= ("{0}:{1}"-f $username,$password)
$basicAuth=[System.Text.Encoding]::UTF8.GetBytes($basicAuth)
$basicAuth=[System.Convert]::ToBase64String($basicAuth)
$headers= @{Authorization=("Basic {0}"-f $basicAuth)}

$buildurl= $projecturi + $project + "/_apis/build/builds/" + $buildID + "?api-version=2.0"

$getbuild = Invoke-RestMethod -Uri $buildurl -headers $headers -Method Get |select definition

$definitionid = $getbuild.definition.id

$defurl = $projecturi + $project + "/_apis/build/definitions/" + $definitionid + "?api-version=2.0"

$definition = Invoke-RestMethod -Uri $defurl -headers $headers -Method Get

$definition.variables.testvariable.value = "1.0.0.1"

$json = @($definition) | ConvertTo-Json  -Depth 999

$updatedef = Invoke-RestMethod  -Uri $defurl -headers $headers -Method Put -Body $json -ContentType "application/json; charset=utf-8"

This script will get the current build definition and update the value of "testvariable" to "1.0.0.1". You need to enable alternative credential.

And then you can add a "PowerShell Script" task in your build definition to run this script.



来源:https://stackoverflow.com/questions/37881017/tfs-ci-build-update-custom-define-variable-after-build-is-succeed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!