Azure devops 是否有可能在VSTS中触发另一个版本的构建?

Azure devops 是否有可能在VSTS中触发另一个版本的构建?,azure-devops,azure-pipelines-release-pipeline,Azure Devops,Azure Pipelines Release Pipeline,我们创建了一个nuget包,并使用VSTS发布管道发布它 然后我们有一个UI项目,演示nuget包的用法 理想情况下,我希望在每次更新nuget包时自动触发UI项目的构建 因此,在UI项目的项目文件中,我做了以下操作: <ItemGroup> <PackageReference Include="TheNugetPackageIwant" Version="1.*" /> <PackageReference Include="Microsoft.As

我们创建了一个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来看,似乎一个构建只能由另一个构建触发


有什么方法可以绕过它吗?

您可以使用RESTAPI并在发布nuget包时从发行版的上下文触发构建管道

首先确保运行管道的服务帐户可以访问

接下来在发布定义中选择代理作业,并在选项中确保它可以访问OAuth令牌

然后在发布定义中添加powerShell脚本以对生成进行排队。请注意,您需要查找要排队的生成的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
}

如果这项工作似乎太多,而您有选择权,您也可以尝试使用扩展来完成。

我明白了。承认目前的工作有点太多,所以我现在就手动触发它:-)