【发布时间】:2018-07-01 09:11:14
【问题描述】:
我们有一个场景:
TFS 2015 用户使用 CI 提交签入,作为 CI 构建的一部分,我们运行 GIT 命令,将当前 TFS 2015 存储库同步到 VSTS GIT 存储库。
下面是代码(同步部分)
在同步 VSTS 中的代码后,它会触发 VSTS 中的 CI 构建。 (对于那个特定的回购)。比如说:内部版本号是 Testbuild_0.1.8
要求是动态读取 VSTS 构建状态,并更新 TFS 2015 中的状态。我想出了一个脚本(如下所示),它获取构建和显示状态(但我必须发送一个硬编码值,有没有办法让我动态阅读?
代码 1:
<pre> <code> git remote add vsts https://Personal%20Access%20Token:$PATToken@test.visualstudio.com/$GITProject/_git/$GITRepo 2>&1|Write-Host
git checkout ${env:BUILD_SOURCEBRANCHNAME}
git reset --hard origin/master
git push vsts ${env:BUILD_SOURCEBRANCHNAME}
</pre> </code>
代码 2:
我必须动态读取值 Build ID 或 Build number 并传递该值以获取构建状态。 [string]$buildNumber = "Testbuild_0.1.8" (标记为粗体) 下面应该动态读取?
<pre> <code >
[CmdletBinding()]
Param(
[string] $TFSURL = "https://remotevsts.visualstudio.com",
[string] $TeamProject = "Test TP",
**[string]$buildNumber = "Testbuild_0.1.8",**
[string]$user = "test@live.com",
[string]$token = "tokenid"
)
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
$uri = "$TFSURL/$TeamProject/_apis/build/builds?api-version=2.0&buildNumber=$($buildNumber)"
$result = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
if ($result.count -eq 0)
{
throw "Unable to locate Build ID for Build Number $($buildNumber)"
}
$buildId = $result.value[0].id
Write-Host "$buildId"
$uri = "https://remotevsts.visualstudio.com/Test TP/_apis/build/builds/$($buildId)?api-version=2.0"
$responseFromGet = Invoke-RestMethod -Method Get -ContentType application/json -Uri $Uri -Headers @{Authorization=("Basic {0}" -f $base64authinfo)}
$status = $responseFromGet.status
Write-Host "$status"
while($status -ne "completed"){
Start-Sleep -Seconds 60
$responseFromGet = Invoke-RestMethod -Method Get -ContentType application/json -Uri $Uri -Headers @{Authorization=("Basic {0}" -f $base64Authinfo)}
$status = $responseFromGet.status
Write-Host "Status: " + $status
}
if ($responseFromGet.result -eq "succeeded")
{
Write-Host "##vso[task.complete result=Succeeded;]Done"
}
else
{
Write-Error "##vso[task.complete result=Failed;]Error testing if demo site is up"
exit 1
}
</pre> </code>
【问题讨论】:
-
要从 TFS2015 CI 构建中读取 VSTS 构建 id,如何确保 TFS 构建和 VSTS 构建同时运行?你能在这里展示详细的工作流程吗?在大多数情况下,如果 VSTS 构建是由 TFS2015 的 CI 构建触发的,我们无法控制触发的 VSTS 构建完成后 TFS 构建是否运行。
标签: git powershell azure-devops azure-pipelines azure-devops-rest-api