【问题标题】:Is it possible to trigger a build with another release in VSTS?是否可以使用 VSTS 中的另一个版本触发构建?
【发布时间】:2020-02-17 17:53:37
【问题描述】:

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

有办法绕过去吗?

【问题讨论】:

    标签: azure-devops azure-pipelines-release-pipeline


    【解决方案1】:

    无论何时发布 nuget 包,您都可以使用 Rest API 并从发布的上下文触发构建管道。

    首先确保运行管道的服务帐户有权访问queue a build

    下一步在您的发布定义中选择代理作业并在选项中确保它可以访问 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

    【讨论】:

    • 我明白了。承认目前工作量太大,所以我现在只手动触发它:-)
    猜你喜欢
    • 2017-01-16
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 2015-04-02
    • 1970-01-01
    相关资源
    最近更新 更多