从 Azure DevOps Server 迁移到 Azure DevOps Services 对于希望利用基于云的协作、可伸缩性和增强功能的组织来说是必不可少的一步 在本概述中,我们将探讨将有价值的数据从本地 Azure DevOps 服务器传输到基于云的 Azure DevOps 服务的选项。
无论选择哪种迁移选项,我们建议确定最重要的资产,例如源代码和工作项。 应考虑数据大小、组织复杂性,并确保在实际迁移之前有足够的时间来运行测试,以实现平稳成功的过渡。
迁移方法
根据采用 Azure DevOps Services 的具体动机,评估每种迁移方法的优缺点至关重要。 正确的策略取决于你的独特环境和需求。
选项 | 建议方案 | 限制 |
---|---|---|
1:手动迁移 | 用于较小的项目或特定数据子集。 | 并非所有数据都可以以完全保真度进行迁移,并且会受到限制。 此迁移不支持迁移 XML 模板,因此你需要将流程模板重新创建为继承模板。 |
2:Azure DevOps 数据迁移工具 | 用于具有不同数据类型和复杂结构的中大规模迁移。 | 只能将一个 Azure DevOps Server 集合“直接迁移”到一个新的 Azure DevOps Services 组织,无需进行任何修改。 有关详细信息,请参阅“限制”部分。 |
3:基于 API 的迁移 | 为具有独特迁移要求或自动化需求的组织提供灵活性和自定义功能。 | 可能会出现低保真、数据丢失和 ID 更改。 有关详细信息,请参阅“限制”部分。 |
选项 1:手动迁移
例如,当 Microsoft 的 Azure DevOps 团队选择从 Azure DevOps Server 迁移到 Azure DevOps Services 时,我们也决定从 Team Foundation 版本控制 (TFVC) 迁移到 Git。 迁移需要大量的规划,但在迁移时,我们使用 TFVC 源的“提示”版本创建了一个新的 Git 存储库,并将我们的历史记录遗留在 Azure DevOps Server 中。 我们还移动了活动工作项,留下了所有旧 bug、已完成的用户故事和任务等。
手动迁移过程
- 确定需要迁移的最重要资产,通常是源代码、工作项或两者兼而有之。 Azure DevOps Server 中的其他资产(生成管道、测试计划等)更难手动迁移。
- 确定一个合适的时间进行转换。
- 准备目标组织。 创建所需的组织和团队项目、预配用户等。
- 迁移数据。
- 考虑将源 Azure DevOps Server 部署设置为只读。 你可通过以下方式完成此操作:
- 调整项目级权限:在项目级别将所有用户或组的权限设置为只读,可以通过修改“项目设置”中的安全角色来实现。
- 修改存储库设置:对于每个存储库,可以更改设置使其为只读,这涉及调整每个用户或组的权限,使其仅允许读取操作。
- 使用内置安全组:利用内置安全组更有效地管理权限。 可以将用户分配到“读取者”等组,以提供只读访问权限。
- 脚本权限更改:如果有多个项目或存储库,则可能需要为它们编写脚本。 可以使用 Azure CLI DevOps 扩展列出所有权限,并根据需要进行更新。
- 禁用存储库功能:禁止访问存储库(包括生成和拉取请求),但使其可被发现并发出警告。 转到项目设置>存储库>,进入存储库,然后在“禁用存储库”旁边,将开关移动到开启。
选项 2:Azure DevOps 数据迁移工具
Azure DevOps 数据迁移工具是 Microsoft 提供的一组实用工具,可帮助将数据从 Azure DevOps Server 迁移到 Azure DevOps Services。 这些工具提供了一种简化的方法来迁移各种工件,包括源代码、工作项、测试用例和其他与项目相关的数据。
在启动迁移过程之前,这些工具可以执行预迁移分析,以评估源环境的准备情况,并确定可能影响迁移的潜在问题或依赖关系。 评估准备情况,以便你可以提前计划和缓解潜在的挑战。
迁移工具限制
该工具允许将一个 Azure DevOps Server 集合“直接迁移”到一个新的 Azure DevOps Service 组织,无需进行任何修改,原因如下:
- 数据完整性和一致性:
- 迁移数据时,保持完整性和一致性至关重要。 允许在迁移过程中进行修改可能会导致数据损坏或不一致。
- 该工具可确保数据在传输过程中保持完整,从而最大限度地降低出错的风险。
- 源数据保留:
- 迁移工具旨在在目标环境中忠实地复制源数据。
- 修改可能会改变原始数据,从而可能导致迁移数据和源数据之间的差异。
- 可预测行为:
- 通过限制修改,该工具确保了迁移过程中的可预测行为。
- 用户可以依赖一致的结果,而不会出现意外的更改。
- 关注迁移,而不是转换:
- 迁移工具的主要目的是将数据从一个位置移动到另一个位置。
- 数据转换(如修改值)通常在迁移后单独处理。
- 支持的迁移方案:
- 目前不支持将项目从一个 Azure DevOps Services 组织移到另一个 Azure DevOps Services 组织。
- 不支持从一个 Azure DevOps Server 实例迁移到另一个实例。
可以在迁移之前或之后清除不需要的数据。
迁移工具过程
- 完成先决条件,例如将 Azure DevOps Server 更新到两个最新版本之一。
- 验证你想要移动到 Azure DevOps Services 的每个集合。
- 生成迁移文件。
- 为迁移过程准备所有内容。
- 执行测试运行。
- 进行迁移。
- 确认用户和数据已迁移,并且集合按预期运行。
选项 3:基于 API 的迁移
如果无法使用数据迁移工具,但仍需要比 选项 2更高的保真迁移,请考虑使用利用公共 API 移动数据的各种工具。 这些工具包括在 Visual Studio Marketplace 中提供的扩展。
基于 API 的迁移限制
基于 API 的迁移存在以下限制:
- 低保真迁移:
- 限制:基于 API 的工具提供比手动复制更高的保真度,但保真度仍然相对较低。
- 含义:虽然这些工具提供了一些保真度,但它们并不能保留数据的所有方面。
- 示例:它们都未保留 TFVC 更改集(Team Foundation 版本控制)的原始日期。
- 许多人也不会保留工作项修订的更改日期。
- 数据丢失和 ID 更改:
- 限制:在迁移期间,工具会重播工作项更改、TFVC 更改集、包源和管道工件。
- 含义:此过程可能会导致数据丢失、生成新 ID 以及更改创建、修改和关闭日期。
- 示例:与特定日期关联的历史上下文可能会丢失,从而影响报告和可跟踪性。
基于 API 的迁移过程
一般来说,只有在超出手动复制的额外保真度至关重要的情况下,我们才建议采用这种方法。 如果你决定采用这种方法,你可以考虑聘请一位具有一种或多种工具经验的顾问,并在最终迁移之前进行测试迁移。
许多组织只需对他们工作的一部分进行非常高保真度的迁移。 新工作可能直接在 Azure DevOps Services 中启动。 其他对保真度要求不那么严格的工作,可以使用其他方法进行迁移。
支持的进程模型
Azure DevOps Services 支持以下进程模型:
默认情况下,在 Azure DevOps 服务中,托管 XML 被关闭。 仅当你在 Azure DevOps Server 中自定义项目时,我们才会在迁移过程中启用托管 XML 流程模型。 项目在托管 XML 上后,就可以升级为迁移后继承状态。
关键原则
迁移到 Azure DevOps Services 时,请记住以下关键原则和限制:
- Azure DevOps 服务仅支持英语:Azure DevOps Server 支持多种语言,但目前 Azure DevOps Services 仅支持英语。 如果你的集合使用非英语语言或过去使用非英语,并且你在升级过程中将语言转换为英语,则无法使用数据迁移工具。
- 继承:一个从敏捷、Scrum 或 CMMI 过程模板创建的项目,从来没有定制过,在迁移之后就处于继承过程模型上。
- 托管 XML:具有自定义项的任何项目都使用托管 XML 进程模型。
- 每个自定义项目的过程:尽管 Azure DevOps Services 允许项目共享进程,但数据迁移工具为每个自定义团队项目创建托管 XML 进程。 例如,如果你有 30 个自定义项目,那么你就有 30 个托管 XML 进程要管理。 如果要为所有项目进一步自定义托管 XML 进程,则必须分别更新每个托管 XML 流程。
- 进程验证:数据迁移工具的进程验证检测每个项目的目标进程模型。 在迁移之前,需要修复托管 XML 项目的任何进程验证错误。 你可能需要考虑更新项目的流程,以匹配我们的其中一个流程(敏捷、Scrum 或 CMMI),从而利用继承流程模型。 请参阅我们的文档,了解有关流程验证类型的更多信息。