如何将 Azure DevOps 项目移至其他组织?

Posted

技术标签:

【中文标题】如何将 Azure DevOps 项目移至其他组织?【英文标题】:How do I move an Azure DevOps project to a different organization? 【发布时间】:2019-04-21 08:00:19 【问题描述】:

我在一个组织(来自 VSTS)中有一个项目,我想转移到我的新组织。

我在 Azure DevOps 中看不到任何关于迁移项目的选项,也看不到互联网上的任何信息。

有人知道怎么做吗?

【问题讨论】:

如果您使用 AzureAD 来管理您的组织,那么您可以关注this 请更改接受的解决方案,@martin 答案是最准确的方法 【参考方案1】:

如果你只需要移动repos,你可以使用内置的克隆功能:

    转到 Azure Devops 源代码库 -> 文件 点击“克隆” 选择“生成 Git 凭据”

    在目标 Azure DevOps 中创建目标存储库 选择“导入存储库” 使用 步骤 3 中的 URL 和凭据

    完成

【讨论】:

6.5 将任何本地存储库的远程存储库更改为新存储库。您可以使用git remote set-url origin https://XXXXX@dev.azure.com/XXXXXX/XXXXX/_git/XXXXXX(https 路径为克隆 url),或手动编辑配置文件并更改远程。使用git remote -v 验证一切正常。 这应该是公认的答案,我做到了并且工作完美 我这样做了,但它给了我一个错误,指出由于以下原因之一无法处理导入请求: 1. 克隆 URL 不正确。 2.克隆网址需要授权。我的凭据是正确的,所以它似乎不接受 URL 好的,我刚刚意识到它有效。与我之前的消息的不同之处在于,现在在我的源存储库中,我单击了“生成凭据”,并且在导入时我在目标用户名和密码字段中传递了这些凭据,并且它起作用了!!之前我试图输入我的登录凭据我用于我的源组织。 此答案仅涵盖如何从 GIT 迁移存储库。从项目中迁移项目管理组件等...怎么样?【参考方案2】:

今天不支持此功能。但是这个功能是计划开发的:make it possible to move a Team Project between Team Project Collections

【讨论】:

由于这不是一个实际的解决方案,我认为它不应该是公认的答案。 @CodeGrue 这可能不是一个解决方案,但它确实回答了这个问题。虽然有些人可能会发现其他解决方案足以满足他们的需求,但现实情况是,对于大多数人来说,这是正确的答案:Microsoft 只是不支持它(但是,如果有的话)。它让我清楚地知道我没有忽略某些东西。【参考方案3】:

如果您的 Azure Devops 项目仅使用单个 Git 存储库跟踪代码版本,因此没有板、用户故事、任务、管道等,那么您可以执行以下操作:

    克隆您的项目存储库。 例如使用 Visual Studio。 如果您已经有本地存储库,则无需克隆。 破坏与遥控器的关联。 为此,通常需要在包含.git 数据库文件夹的文件夹中打开命令行提示符,很可能是Visual Studio 的解决方案文件夹,然后键入git remote rm origin。 这是一个使用 git bash 显示解决方案文件夹内容的示例,包括 .git 数据库和 *.sln Visual Studio 解决方案文件: 如果尚未完成,请使用 Visual Studio 打开解决方案。 现在应该显示您有许多提交等待推送到远程。出于说明目的,我的玩具项目总共只有 8 次提交。 单击向上箭头并选择您的新远程,例如一个全新的 Azure DevOps 项目,在您选择的组织中,然后推送。 您现在已完成在另一个组织中克隆项目。如果需要,则销毁旧组织中的项目以完成“移动”操作。

【讨论】:

这会保留历史吗? @JoshuaDrake 是的,绝对是。 我需要一个解决方案来移动所有拉取请求和问题以及诸如 npm 注册表之类的工件【参考方案4】:

扩展其他人的答案,这篇文章是关于管道的。

Azure DevOps API

跨组织迁移项目的几乎所有方面是可行的,但使用 Azure DevOps API 需要大量手动工作。下面的链接向您展示了所有端点、变量等。从那里您可能想要编写一个 Power Shell 脚本并对一个虚拟组织进行几次测试。

https://docs.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-6.1&viewFallbackFrom=azure-devops-rest-6.0

应用内选项

如果您避免使用 API,则无法迁移保留构建或发布历史记录的管道,但您可以通过进入管道并选择查看 YAML 来保留您的配置和流程。从这里您可以将其作为注释带走,以在您的新组织/项目位置重新创建 GUI 步骤,或者在您的 git 存储库中实际采用 YAML 标准。

我认为没有办法将管道变量迁移到 API 之外。但是,你可以将变量移动到 Azure Key Vault 并将管道设置 (YAML) 更改为引用来自 Key Vault 的值。这不是很大的努力,是一个很好的流程改进。

最后,如果您有任何本地安装的用于发布的管道代理,您将需要在盒子上为您的新组织运行 Power Shell 脚本。非常简单的 5m 步,但目前代理池不能跨组织共享。

【讨论】:

【参考方案5】:

据我所知,有 3 个项目可以实现这一目标。

Ops Hub 的付费选项 - OpsHub Visual Studio Migration Utility

需要更改工作项流程模板的开源工具 - Azure DevOps Migration tools

最后一个非官方但仍由 Microsoft 编写的用于创建 Azure DevOps 项目模板的工具 - Azure DevOps Demo Generator & extractor tool

使用最后一个(演示生成器)将项目提取为模板,然后将其应用于新组织。由于它是用于演示的工具,因此不提供任何支持,根据我的经验,它适用于简单的项目,但在任何复杂的项目上都会失败。

【讨论】:

【参考方案6】:

正如@Frederic 在他的回答中提到的,我们实际上可以使用 Visual Studio 轻松完成。我在没有 Visual Studio 的情况下完成了这项工作。涉及的步骤如下。

    向两个组织添加用户 配置 SSH 密钥 更新源 DevOps 中的 SSH 密钥并克隆存储库 查看所有分支和标签 在目标 DevOps 中更新 SSH 密钥 删除旧的并添加新的来源 推所有分支

命令和详细解释可以在here找到。

【讨论】:

这将移动代码,但不会移动 DevOps 项目。

以上是关于如何将 Azure DevOps 项目移至其他组织?的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure DevOps 上,用户如何能够访问组织的每个项目?

如何从 Azure Devops 服务器迁移到 Azure Devops 服务中的现有组织

我们如何使用管道将azure devops中的应用程序部署到具有不同订阅和组织的azure app服务

Azure 门户没有看到 DevOps 组织 [帐户问题?]

Azure DevOps - 组织项目和存储库

Azure DevOps 集合级别自定义组