Динамическое чтение идентификатора удаленного VSTS Build из TFS 2015 - PullRequest
0 голосов
/ 01 июля 2018

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

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

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

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

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

Код 1:

<code><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}

Код 2:

Мне нужно прочитать значение Build ID или номер сборки динамически и передать значение, чтобы получить статус сборки. Ниже [строка] $ buildNumber = "Testbuild_0.1.8" (отмечен жирным шрифтом) должен читаться динамически?

<code><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
}


1 Ответ

0 голосов
/ 01 июля 2018

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

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

...