【问题标题】:Read remote VSTS Build id dynamically from TFS 2015从 TFS 2015 动态读取远程 VSTS Build id
【发布时间】: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


【解决方案1】:

您需要使用List api 来查询最近的构建(您已经可以使用您知道的参数来确定构建的范围)并使用then use the SourceBranch/SourceVersion to match 针对您必须找到正确构建的 git ref。

或者,不要在 VSTS 构建上设置 CI,并使用 Build/Queue api 从 TFS 对构建进行排队。这样您就可以在排队时知道确切的构建 ID。

【讨论】:

    猜你喜欢
    • 2016-05-13
    • 2018-11-22
    • 1970-01-01
    • 2017-05-11
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2019-01-13
    相关资源
    最近更新 更多