如何将 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服务