
Allegro 分享了它用于大规模管理代码迁移的流程细节。该公司将 GitHub 的 Dependabot 和 OpenRewrite 项目结合起来,形成了一个定制解决方案,形成了一个定制解决方案,帮助开发人员自动执行跨多个源代码仓库的日常代码迁移任务。公司解决了很多边缘情况,以确保流程能顺利进行,缓解了开发人员之间最初的信任问题。
Allegro 创建并管理着一个庞大的微服务平台,涵盖了超过 2000 个的服务。在如此大的规模下,代码迁移可能会变得令人头疼。Allegro 的首席工程师Bartosz Gałek描述了手动应用代码迁移的挑战:
当公司范围内的库引入新版本时,跨多个仓库迁移代码极其痛苦,因为它们引入了破坏性的变更。传统上,开发人员必须遵循发布说明中的迁移指南,确定所需的更改,并手动更新他们的代码。这个过程不仅耗时,而且容易出现人为错误,这可能导致生产中的不一致性和潜在问题。这也引发了许多关于 Slack 支持渠道的问题。
公司选择尽可能多地自动化代码迁移,并决定使用GitHub的Dependabot和OpenRewrite项目。工程师们创建了一个名为 allegro-rewrite 的自定义 GitHub 应用程序,并为自己设定了一个使命,即为支持大规模自动化代码迁移提供一个开发人员友好的流程。项目背后的团队希望实现特定的目标,例如支持新工具的轻松采用,提供可审计性和可逆性,实施对时间敏感的迁移的截止日期流程,并确保迁移可以根据需要轻松地重新运行。
该解决方案依赖于 Dependabot 持续监控 Allegro 的 GitHub 组织中的过时依赖项。当 Dependabot 创建一个拉取(pull)请求时,自定义的 allegro-rewrite GitHub 应用程序会触发一个工作流程,该工作流程会根据一系列的 OpenRewrite 配方来解决基于变更用例的破坏性变更。

自动化代码迁移流程(来源:Allegro技术博客)
该团队以多种方式扩展了最初的实现。工程师们为 GitHub 的拉取请求引入了注释命令,使 PR 审查者和 allegro-rewrite 应用程序之间能够进行交互。此外,该应用程序支持强制合并对时间敏感的更改,例如,当安全漏洞影响许多仓库时,必须在特定的截止日期前解决。他们还将同一应用程序作为 CLI 版本提供,以便公司的工程师可以本地使用它,并潜在地将其用于其他用例,而不仅仅是与 GitHub 相关的工作流程。

使用 CLI 运行自定义的 OpenRewrite 配方(来源:Allegro技术博客)
推出代码迁移的自动化流程面临着一些挑战。最初,该公司的开发人员对于以自动化方式执行大规模迁移持怀疑态度,担心应用的变更数量以及在规模上引入问题的可能性。此外,在某些情况下,代码解析和 YAML 格式化偶尔会遇到一些不可预见的部署后问题。尽管如此,该团队迅速改进了配方测试覆盖率,以避免将来出现此类的问题。最后,如果内部库维护者需要实现 OpenRewrite 配方来帮助处理新库版本中引入的破坏性更改,那么自动化迁移流程会给他们带来额外的工作量。
Allegro 的开发人员仍在努力进行进一步的改进,并计划将解决方案开源,以便其他组织可以从他们的经验中受益。
Mark Brown在博客文章中评论道:
这太神奇了。我们也正好在尝试解决同样的问题。期待能够使用这个工具。干得好,伙计们!
原文链接:
https://www.infoq.com/news/2025/05/allegro-code-migrations-scale/
评论