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

如何在Azure Devops(VSTS)中导入发布定义?,azure,tfs,continuous-integration,azure-devops,azure-pipelines-release-pipeline,Azure,Tfs,Continuous Integration,Azure Devops,Azure Pipelines Release Pipeline,我正在尝试将版本定义从一个Azure Devops(VSTS)项目复制到另一个项目。在源项目中,我能够将发布定义导出为json文件 但我无法找到一种方法将其导入到目标项目中。我只有创建新定义的选项 转到Build and Release,然后再转到Release,在那里您将找到一个选项。 单击+按钮,可以选择导入发布定义 如果您需要进一步帮助,请告诉我。将此作为已接受答案的补充。 公认的答案确实有效,但我应该指出,我最初的问题并没有通过它得到精确的解决 基本上,如果您没有任何现有的发布定义,

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

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

转到Build and Release,然后再转到Release,在那里您将找到一个选项。 单击+按钮,可以选择导入发布定义

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

将此作为已接受答案的补充。

公认的答案确实有效,但我应该指出,我最初的问题并没有通过它得到精确的解决


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

由于VSTS被重命名/更新为Azure DevOps,因此在UI中会有一些更改以查找上面的选项

进口

出口

关于增编
所有的构建/发布定义都附带了一个称为Pipeline的术语。因此,不需要创建虚拟发布定义来导入新的发布定义。您可以导入一个新的发布定义,而无需任何伪版本。

阅读上面的注释,您在从其他VSTS/Azure DevOps Organization导入发布定义时遇到问题的原因是,您导出的发布定义包含对该版本中不存在的对象的GUID引用要将发布定义导入的组织或项目。因此,您必须卷起袖子,做一些工作,以获得一个成功的、平滑的、完全集成的发布定义,并将其用作模板。我们将使用在此处找到的REST API:

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

  • 导出您选择的发布定义

  • 在一些工具中格式化JSON,使其更具可读性,然后将其保存在文本文件中,如ReleasePipelineTemplate-Formatted.JSON

  • 我不知道您在发布定义中定义了哪些组件,但请环顾四周,看看guid在整个过程中是如何使用的。创建一个发布定义以查找您将要替换的guid可能会有所帮助

  • 要查找的GUID包括SYSTEM\u COLLECTIONID、SYSTEM\u TEAMPROJECTID、SYSTEM\u DEFINITIONID、BUILD\u QUEUEDBYID

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

  • 在我们修改json文件之前,您应该复制一份。您应该通过删除诸如“createdOn”、“modifiedBy”、“modifiedOn”之类的内容来稍微精简json文件。在最底部是“url”是3个链接。例如,这些需要使用团队项目ID GUID进行修改。这只是一个需要修改的地方的例子。请检查您自己的发布定义

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

  • $homeDir=“$(分割路径-父$MyInvocation.MyCommand.Definition)”
    $VSTS_RestApiHost=”https://vsrm.dev.azure.com/yourpath/_apis"
    $VSTS\u PAT=“您的\u PAT\u令牌\u在此”
    $headers=@{Authorization=“Basic”+[System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(“:$($VSTS_PAT)”))}
    $relDefInfo=获取内容“$homeDir\ReleasePipelineTemplate Formatted.json”
    编写主机“创建发布管道…”
    $createReleaseDef=“$($VSTS_RestApiHost)/release/definitions?api版本=4.1-preview.3”
    $response=Invoke RestMethod-Method Post-Uri$createReleaseDef-Body$relDefInfo-ContentType'application/json'-Headers$Headers
    写入主机“创建发布管道完成。管道id:$($response.id)”
    如果($response.id-gt 0){
    写入主机“发布定义:成功”
    }
    
    写入主机$response.id
    ,导出后生成json文件并保存在本地文件夹中。 然后转到release或plus(+)按钮,单击它,您可以看到inport选项,单击它并选择该json文件。
    就这样….

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

    一旦有了它,它将启用导入选项


    效果很好,谢谢!它给了我一个警告说,
    发布定义中的以下属性未导入:代理队列、部署组、部署组标记、批准、变量组和秘密变量的值。
    有什么方法可以解决这个问题吗?我不知道有什么方法可以超越开发组和代理队列..导入时,它确实为您提供了从下拉列表中选择的选项。如果您在一个没有版本定义的项目中,您将看不到这个+按钮,您必须创建一个新的空白版本,保存它,然后当您返回时,您将看到该按钮。@raterus thank's。。。此信息应添加到回答中请注意,此回答所指的是使用GUI导入下载的json文件,该文件将导入发布定义