是否可以在 VSTS 中使用另一个版本触发构建?
Is it possible to trigger a build with another release in VSTS?
我们创建了一个 nuget 包并使用 VSTS 发布管道来发布它。
然后我们有一个 UI 项目来演示 nuget 包的用法。
理想情况下,我想在每次更新 nuget 包时自动触发 UI 项目的构建。
所以在 UI 项目的项目文件中,我这样做了:
<ItemGroup>
<PackageReference Include="TheNugetPackageIwant" Version="1.*" />
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
</ItemGroup>
我认为这将使 UI 项目始终使用最新的包(假设我们始终使用版本 1)。
但是,如何在新的 nuget 包可用时触发 UI 项目自动构建?从 devop 看来,构建只能由另一个构建触发。
有办法绕过去吗?
您可以使用 Rest API 并在您发布 nuget 包时从发布上下文触发构建管道。
首先确保您的服务帐户 运行 管道可以访问 queue a build。
接下来在您的发布定义中 Select 代理作业并在选项中确保它可以访问 OAuth 令牌。
然后在您的发布定义中添加一个 powerShell 脚本来对构建进行排队。请注意,您需要找到要排队的Build的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
}
如果这看起来工作量太大并且您可以选择,您还可以尝试使用扩展程序来执行 heavy lifting for you。
我们创建了一个 nuget 包并使用 VSTS 发布管道来发布它。
然后我们有一个 UI 项目来演示 nuget 包的用法。
理想情况下,我想在每次更新 nuget 包时自动触发 UI 项目的构建。
所以在 UI 项目的项目文件中,我这样做了:
<ItemGroup>
<PackageReference Include="TheNugetPackageIwant" Version="1.*" />
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
</ItemGroup>
我认为这将使 UI 项目始终使用最新的包(假设我们始终使用版本 1)。
但是,如何在新的 nuget 包可用时触发 UI 项目自动构建?从 devop 看来,构建只能由另一个构建触发。
有办法绕过去吗?
您可以使用 Rest API 并在您发布 nuget 包时从发布上下文触发构建管道。
首先确保您的服务帐户 运行 管道可以访问 queue a build。
接下来在您的发布定义中 Select 代理作业并在选项中确保它可以访问 OAuth 令牌。
然后在您的发布定义中添加一个 powerShell 脚本来对构建进行排队。请注意,您需要找到要排队的Build的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
}
如果这看起来工作量太大并且您可以选择,您还可以尝试使用扩展程序来执行 heavy lifting for you。