如何更新我的 Azure DevOps 本地管道任务以包含 MSBuild v17 和 Visual Studio 2022?

Nat*_*ngs 10 msbuild azure-devops azure-pipelines azure-devops-server-2020 visual-studio-2022

如何更新本地 Azure Devops Pipeline 任务以包含新的 MSBuild v17 和 Visual Studio 2022 生成任务?

我在这里找到了更新的 MSBuild 任务:
https://github.com/microsoft/azure-pipelines-tasks/tree/master/Tasks/MSBuildV1

我发现旧的 MSBuild v16 任务安装在此处:
C:\Program Files\Azure DevOps Server 2020\Tools\Deploy\TfsServicingFiles\Tasks\Individual\MSBuildV1\

更新这个的正确方法是什么?

Ian*_*ill 5

在我们可以更新 DevOps 版本本身之前,我们安装了 Build Tools 2022 并在构建任务设置中设置了 msbuild 路径(而不是版本):

MSBuild 位置


jes*_*ing 4

扩大

我发布了一个预构建的扩展,该扩展打包了来自 Azure DevOps(服务)的当前任务版本的副本。

这将使您能够无风险地与 Microsoft 的旧版本一起安装任务。

自己做

你有两个选择。

  1. 从现有的 Azure DevOps 组织(云版本)下载任务。然后使用 tfx 或 PowerShell 将升级后的任务上传到 Azure DevOps 服务器。
  2. 从源构建任务并将其发布到 Azure DevOps 服务器。

我在博客文章中概述了该过程:

https://jessehouwing.net/adding-visual-studio-2022-to-azure-devops-server-2020/

下面的脚本是最安全的,因为它使用了推送到 Azure DevOps 服务的确切版本。

$tasksToDownload = @("VSBuild", "VsTest", "VsTestPlatformToolInstaller", 
                  "MSBuild", "DotNetCoreInstaller", "DotNetCoreCLI")

$org = "<<insert source org>>"
$pat = "<<insert PAT | Agent Pool (Manage)>>"
$projectCollectionUri = "https://yourtfs/yourcollection"

$url = "https://dev.azure.com/$org"
$header = @{authorization = "Basic $([Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(".:$pat")))"}

$tasks = Invoke-RestMethod -Uri "$url/_apis/distributedtask/tasks" -Method Get -ContentType "application/json" -Headers $header | ConvertFrom-Json -AsHashtable

foreach ($taskName in $tasksToDownload)
{
    $taskMetadatas = $tasks.value | ?{ $_.name -ieq $taskName }
    foreach ($taskMetadata in $taskMetadatas)
    {
        $taskid = $taskMetadata.id
        $taskversion = "$($taskMetadata.version.major).$($taskMetadata.version.minor).$($taskMetadata.version.patch)"
        $taskZip = "$taskName.$taskid.$taskversion.zip"
        Invoke-WebRequest -Uri "$url/_apis/distributedtask/tasks/$taskid/$taskversion" -OutFile $taskZip -Headers $header

        & tfx build tasks upload --task-zip-path "$taskZip" --service-url $projectCollectionUri
    }
}
Run Code Online (Sandbox Code Playgroud)

所需代理版本

您需要从 azure-pipelines-agent 存储库安装最新的代理,以使其自动检测 Visual Studio 2022,或者手动向代理添加功能。

您可能需要强制 Azure DevOps Server 不要降级回其首选代理版本。您可以在启动代理之前在服务器的系统级别设置以下环境变量来实现此目的:

 AZP_AGENT_DOWNGRADE_DISABLED=true 
Run Code Online (Sandbox Code Playgroud)

这些技巧适用于 azure-pipelines-tasks 存储库中的大多数任务,只要它不依赖于你的 Azure DevOps Server 版本中不可用的 UI 扩展或服务连接类型。