扩大
我发布了一个预构建的扩展,它打包了来自 Azure DevOps(服务)的当前任务版本的副本。
这将允许您与 Microsoft 的旧版本一起无风险地安装任务。
自己做
您有 2 个选项。
- 从现有 Azure DevOps 组织(云版本)下载任务。然后使用 tfx 或 PowerShell 将升级后的任务上传到您的 Azure DevOps 服务器。
- 从源代码构建任务并将它们发布到您的 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
}
}
所需的代理版本
您将需要从 azure-pipelines-agent 存储库安装最新的代理,以便自动检测 Visual Studio 2022,或者手动将功能添加到代理。
您可能需要强制 Azure DevOps Server 不降级回其首选代理版本。您可以通过在启动代理之前在服务器的系统级别设置以下环境变量来执行此操作:
AZP_AGENT_DOWNGRADE_DISABLED=true
这些技巧适用于 azure-pipelines-tasks 存储库中的大多数任务,只要它不依赖于您的 Azure DevOps Server 版本中不可用的 UI 扩展或服务连接类型。