如何在 Azure Devops (VSTS) 中导入发布定义?

How do you import a release definition in Azure Devops (VSTS)?

我正在尝试将发布定义从一个 Azure Devops (VSTS) 项目复制到另一个项目。在源项目中,我可以将发布定义导出为 json 文件。

但我找不到将其导入目标项目的方法。我只有创建新定义的选项。

转到“构建和发布”,然后转到“发布”,您会在那里找到一个选项。 单击 + 按钮,可以选择导入发布定义

如果您需要进一步的帮助,请告诉我。

将此留在这里作为已接受答案的附录。

接受的答案确实有效,但我应该指出,我最初的问题并没有被它准确解决。

基本上,如果您没有任何现有的发布定义,似乎没有办法导入定义。我所做的是创建一个 'dummy' 定义,然后按照接受的答案所说的进行操作。创建至少一个定义会将您带到该屏幕,否则您只会看到我在问题中显示的屏幕。

由于 VSTS Renamed/updated 进入 Azure DevOps,UI 中有一些更改以找到上面的那些选项。

用于导入

用于导出

关于附录

所有 build/Release 定义都伴随着一个名为管道的术语。因此无需创建虚拟版本定义即可导入新版本。您可以在没有任何虚拟版本的情况下导入新版本定义。

根据上面的评论,您在从不同的 VSTS/Azure DevOps 组织导入发布定义时遇到问题的原因是因为您导出的发布定义包含对对象的 GUID 引用,这些对象不存在于您要将发布定义导入其中的组织或项目。因此,您将不得不卷起袖子做一些工作,以便成功地顺利且完全集成发布定义,您可以将其用作模板。我们将使用此处的 REST API:https://docs.microsoft.com/en-us/rest/api/vsts/release/definitions/create?view=vsts-rest-4.1

这是我的技术答案以及我为复制发布定义所做的工作并创建了一个可多次使用的模板:

  1. 导出您选择的版本定义

  2. https://jsonformatter.curiousconcept.com等工具中格式化JSON使其更具可读性,然后将其保存在文本文件中,如ReleasePipelineTemplate-Formatted.json

  3. 我不知道您在发布定义中定义了哪些组件,但请四处看看并了解 GUID 在整个过程中是如何使用的。创建发布定义以查找您将不得不替换的 GUID 可能会有所帮助。

  4. 要查找的 GUID 是 SYSTEM_COLLECTIONID、SYSTEM_TEAMPROJECTID、SYSTEM_DEFINITIONID、BUILD_QUEUEDBYID

  5. 让我们从您的构建组织和项目中获取上面提到的一些变量。为了获得这些,我们需要在常规构建期间打印一些环境变量。因此,请在 CI 构建开始的某处添加构建步骤,使用以下命令 "C:\Windows\System32\cmd.exe" 和参数“/c set”添加 "Batch Script" 步骤。构建完成后,查看该构建步骤的日志并找到这些变量的值。您将需要发布定义中的那些。

  6. 我们修改json文件之前,您应该复制一份。您应该 trim 通过删除 "createdOn"、"modifiedBy"、"modifiedOn" 等一些内容来稍微降低 json 文件。最下面是 "url" 是 3 link。例如,那些需要使用团队项目 ID GUID 进行修改。这只是一个需要修改的地方的例子。请检查您自己的发布定义。

  7. 我假设您已经对 JSON 文件进行了必要的更改并准备好尝试导入它。使用以下脚本示例创建名为 'CreateReleasePipeline.ps1' 的 PowerShell 脚本。

$homeDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
$VSTS_RestApiHost = "https://vsrm.dev.azure.com/yourpath/_apis"
$VSTS_PAT = "YOUR_PAT_TOKEN_HERE"
$headers = @{Authorization = "Basic " + [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($VSTS_PAT)"))}
$relDefInfo = Get-Content "$homeDir\ReleasePipelineTemplate-Formatted.json"
Write-Host "Creating Release Pipeline..."
$createReleaseDef = "$($VSTS_RestApiHost)/release/definitions?api-version=4.1-preview.3"
$response = Invoke-RestMethod -Method Post -Uri $createReleaseDef -Body $relDefInfo -ContentType 'application/json' -Headers $headers
Write-Host "Create Release Pipeline done. Pipeline id: $($response.id)"
if ($response.id -gt 0) {
  Write-Host "Release definition: succeeded."
}
Write-Host $response.id

  1. 使用“.\CreateReleasePipeline.ps1”执行您的脚本,输出将如下所示:

.\CreateReleasePipeline.ps1
Creating Release Pipeline...
Create Release Pipeline done. Pipeline id: 71
Release definition: succeeded.
71

  1. 刷新您的发布管道网页,您应该会看到新创建的发布管道。

  2. 您可以继续重试,直到您对结果满意为止。

我正在使用此 REST API 将发布定义模板放入源代码存储库,这样我在对它们进行调整时就不必更新 50 多个和不断增长的发布管道。我可以通过 REST API 调用检查发布定义是否存在,如果不存在则创建它,如果它不是最新的则更新它。所有这些都无需手动更新它们或在创建新的 get repo 时创建管道。我想尽可能地自动化一切。我想改一次或者尽量少改,让系统自己更新。

如果有帮助,请告诉我。

导出后生成 json 文件保存在本地文件夹中。 然后转到发布或加号 (+) 按钮单击它,您可以看到 inport 选项,单击它和 select 那个 json 文件。 就是这样.....

如果您没有看到导入选项,您可以尝试创建第一个空管道

获得后,它会启用导入选项