Динамическое чтение удаленного идентификатора сборки VSTS из TFS 2015

У нас есть сценарий, в котором:

Пользователи TFS 2015 фиксируют проверки с помощью CI, в рамках сборки CI мы запускаем команды GIT, которые синхронизируют текущий репозиторий TFS 2015 с репозиторием VSTS GIT.

Ниже приведен код (часть синхронизации)

Сразу после синхронизации кода в VSTS он запускает сборку CI в VSTS. (Для этого конкретного репо). скажите, например: номер сборки Testbuild_0.1.8

Требование состоит в том, чтобы динамически читать статус сборки VSTS и обновлять статус в TFS 2015. Я придумал сценарий (см. Ниже), который получает статус сборки и отображает (но я должен отправить жестко закодированное значение, есть ли способ, где я могу динамически читать?

Код 1:

<pre> <code> git remote add vsts https://Personal%20Access%20Token:[email protected]/$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 = "[email protected]",
   [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>

person user2153844    schedule 01.07.2018    source источник
comment
Чтобы прочитать идентификатор сборки VSTS из сборки TFS2015 CI, как убедиться, что сборка TFS и сборка VSTS выполняются одновременно? Можете ли вы показать подробный рабочий процесс здесь. В большинстве случаев, если сборка VSTS запускается сборкой CI из TFS2015, мы не можем контролировать выполнение сборки TFS после завершения инициированной сборки VSTS.   -  person Marina Liu    schedule 02.07.2018


Ответы (1)


Вам нужно будет использовать List api для запроса последних сборок (вы уже можете ограничить сборку известными вам параметрами) и затем используйте SourceBranch/SourceVersion для сопоставления с git ref, который вам нужен, чтобы найти правильную сборку.

В качестве альтернативы не устанавливайте CI в сборке VSTS и ставьте сборку в очередь из TFS с помощью API сборки/очереди. Таким образом, вы узнаете точный идентификатор сборки во время очереди.

person jessehouwing    schedule 01.07.2018