是否可以在 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