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

时间:2018-05-09 04:50:50

标签: azure tfs continuous-integration azure-devops azure-pipelines-release-pipeline

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

export release definition

但是我无法找到将其导入目标项目的方法。我只能获得创建新定义的选项。

create release definition

6 个答案:

答案 0 :(得分:7)

由于 VSTS被重命名/更新为Azure DevOps ,因此UI进行了一些更改以在上面找到这些选项。

用于导入

enter image description here

用于导出

enter image description here

关于附录

所有构建/发布定义都与一个称为“管道”的术语一起出现。因此,无需创建虚拟发布定义即可导入新的发布定义。您可以导入新的发行版定义,而无需任何虚拟的定义。

答案 1 :(得分:4)

通过阅读以上评论,您可能无法从不同的VSTS / Azure DevOps组织中导入版本定义,原因在于导出的版本定义包含对组织或项目中不存在的对象的GUID引用您要将版本定义导入到其中。因此,您将必须卷起袖子并做一些工作,以使您可以成功成功地使用平滑且完全集成的Release Definition,并将其用作模板。我们将使用以下位置的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”添加一个“批处理脚本”步骤。构建完成后,在该构建步骤中查看日志,并找到这些变量的值。您将需要在“发行版本定义”中使用它们。

  6. 在修改json文件之前,您应该先进行复制。您应该通过删除一些东西(例如“ createdOn”,“ modifiedBy”,“ modifiedOn”)来修剪json文件。最底部是“ URL”是3个链接。例如,那些需要使用团队项目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时创建管道。我想使所有事情尽可能自动化。我想更改一次或最少更改,然后让系统自行更新。

请告诉我这是否有帮助。

答案 2 :(得分:2)

enter image description here

转到Build and Releases然后Releases,在那里你会找到一个选项。 单击+按钮,可以选择导入版本定义

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

答案 3 :(得分:0)

将此作为已接受答案的附录。

接受的答案确实有效,但我应该提到我的初始问题并没有得到解决。

基本上,如果您没有任何现有版本定义,则似乎没有办法导入定义。我所做的是创建一个“虚拟”定义,然后按照接受的答案说明。创建至少一个定义会带您进入该屏幕,否则您将只获得我在问题中显示的屏幕。

答案 4 :(得分:0)

导出后,它会生成json文件并将其保存在本地文件夹中。 然后转到release或加号(+)按钮单击它,然后可以看到inport选项,然后单击它并选择该json文件。 就是这样.....

答案 5 :(得分:0)

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

enter image description here

拥有后,它将启用导入选项

enter image description here