Можно ли запустить сборку с другим выпуском в VSTS? - PullRequest
1 голос
/ 17 февраля 2020

Мы создали пакет nuget и используем конвейер выпуска VSTS для его выпуска.

Затем у нас есть проект пользовательского интерфейса, который демонстрирует использование пакета nuget.

В идеале я хотел бы запускать сборку проекта пользовательского интерфейса автоматически при каждом обновлении нашего пакета nuget.

Итак, в файле проекта проекта пользовательского интерфейса я сделал следующее:

<ItemGroup>
    <PackageReference Include="TheNugetPackageIwant" Version="1.*" />
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
  </ItemGroup>

Я думаю, что это сделает проект пользовательского интерфейса всегда используйте последний пакет (предположим, что мы всегда придерживаемся версии 1).

Однако как я могу запустить проект пользовательского интерфейса для автоматической сборки при появлении нового пакета nuget? От devop кажется, что сборка может быть запущена только другой сборкой.

Есть ли способ обойти его?

1 Ответ

1 голос
/ 18 февраля 2020

Вы можете использовать Rest API и запускать конвейер сборки из контекста выпуска всякий раз, когда вы публикуете sh пакет nuget.

Сначала убедитесь, что ваша учетная запись службы, выполняющая конвейер, имеет доступ к очереди сборки .

enter image description here

enter image description here

Далее в определении выпуска Выберите задание агента и в параметрах убедитесь, что оно может получить доступ к токену OAuth.

enter image description here

Затем добавьте сценарий powerShell в определение выпуска, чтобы поставить в очередь сборку. Обратите внимание, что вам нужно go и найти BuildDefinitionId сборки, которую вы хотите поставить в очередь.

#Need to find the ID of your build definition. Just open the Defintion in the web UI it will be in the url
$BuildDefintionId = 37

$Body = @"
{
    "definition": {
        "id": $BuildDefintionId
    }
} 
"@

Write-host $Body

try {
    $url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/builds?api-version=5.1"
    Write-Host "URL: $url"
    $response = Invoke-RestMethod -Uri $url -Method POST -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -Body $Body -ContentType application/json
  if ($response -ne $Null) {
    Write-Host "*******************Bingo*********************************"
  }
}
catch {
  Write-Error $_
  Write-Error $_.Exception.Message
}

Если это кажется слишком большой работой, и у вас есть возможность, вы также можете попробовать расширение для сделайте тяжелую работу за вас .

...