燃爆上海 5·23-24,AICon 大模型实战风暴,50+ 干货一网打尽,即将开幕~ 了解详情
写点什么

Allegro 如何为 2000 多个微服务进行自动化代码迁移

  • 2025-05-21
    北京
  • 本文字数:1281 字

    阅读完需:约 4 分钟

大小:623.58K时长:03:32
Allegro如何为2000多个微服务进行自动化代码迁移

Allegro 分享了它用于大规模管理代码迁移的流程细节。该公司将 GitHub 的 Dependabot 和 OpenRewrite 项目结合起来,形成了一个定制解决方案,形成了一个定制解决方案,帮助开发人员自动执行跨多个源代码仓库的日常代码迁移任务。公司解决了很多边缘情况,以确保流程能顺利进行,缓解了开发人员之间最初的信任问题。

 

Allegro 创建并管理着一个庞大的微服务平台,涵盖了超过 2000 个的服务。在如此大的规模下,代码迁移可能会变得令人头疼。Allegro 的首席工程师Bartosz Gałek描述了手动应用代码迁移的挑战:

 

当公司范围内的库引入新版本时,跨多个仓库迁移代码极其痛苦,因为它们引入了破坏性的变更。传统上,开发人员必须遵循发布说明中的迁移指南,确定所需的更改,并手动更新他们的代码。这个过程不仅耗时,而且容易出现人为错误,这可能导致生产中的不一致性和潜在问题。这也引发了许多关于 Slack 支持渠道的问题。

 

公司选择尽可能多地自动化代码迁移,并决定使用GitHub的DependabotOpenRewrite项目。工程师们创建了一个名为 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/

2025-05-21 17:001

评论

发布
暂无评论

模块五学习总结

Geek_1d37ea

架构实战营

【LeetCode】从英文中重建数字Java题解

Albert

算法 LeetCode 12月日更

拆分电商系统为微服务

deng

架构实战营

再来一篇!看jdk源码大师亲自操刀编写的集合源码!

看点代码再上班

Java 架构 软件技术

创业研发团的组织建设-硬件开发流程

wood

创业 敏捷 28天写作 硬件开发

架构实战营 - 毕业总结

Alex.Wu

电商业务服务拆分

🌾🌾🌾小麦🌾🌾🌾

架构实战营

如何实现单体架构到微服务架构的蜕变?

看山

微服务架构 单体架构 签约计划第二季

Springboot异步任务执行及监控

xcbeyond

springboot 异步任务 28天写作 12月日更

Android C++系列:Linux线程(二)线程原语

轻口味

android 28天写作 12月日更

在 JavaScript 中创建私有成员

devpoint

JavaScript typescript ES2020 ES6 12月日更

DDD领域驱动设计落地实践:六步拆解DDD

慕枫技术笔记

架构 后端 签约计划第二季

对研发管理的一些思考

hackstoic

研发管理 规范

除了微服务,我们还有其他选择吗?

看山

容器 微服务架构 无服务器云函数 SOA 签约计划第二季

模块六作业

沐风

在线JSON在线对比差异工具

入门小站

工具

架构实战营毕业总结

紫云

架构实战营

庞氏骗局:购物就能赚钱

石云升

28天写作 电信诈骗 12月日更 庞氏骗局

天长地久->曾经拥有

mtfelix

28天写作

模块五作业

Geek_1d37ea

架构实战营

Nacos 本地单机版部署步骤和使用 – Spring Cloud 系列教程

程序员泥瓦匠

nacos

现代软件架构师的10个技巧

俞凡

架构 微服务 云原生

hw6-拆分电商系统为微服务

WWH

架构实战营

极限数据 v0.2 版本正式发布了

极限实验室

elastic console Elastic Search 极限数据平台 ES多集群管理

长短租用户体验

张老蔫

28天写作

毕业总结

guangbao

35 K8S之kubeconfig配置文件

穿过生命散发芬芳

k8s 28天写作 12月日更

对比 volatile vs synchornized

悟空聊架构

volatile 28天写作 悟空聊架构 12月日更

设计电商秒杀系统

白开水又一杯

#架构实战营

浅谈指标体系建设(一)

圣迪

DDD领域驱动设计落地实践系列

慕枫技术笔记

内容合集 签约计划第二季

Allegro如何为2000多个微服务进行自动化代码迁移_架构_Rafal Gancarz_InfoQ精选文章