写点什么

通过合并队列改善 GitHub 的部署

  • 2024-04-26
    北京
  • 本文字数:1029 字

    阅读完需:约 3 分钟

通过合并队列改善 GitHub 的部署

最近,Github 谈到了如何使用合并队列(merge queue)来实现代码更新。GitHub.com 的合并队列已经开发并扩展到了管理超过 30000 个拉取请求(pull request),以及相应的 450 万次 CI 执行。


合并队列系统将拉取请求组织成可部署的批次,通过 GitHub Actions 启动构建和测试,并通过遵循分支保护规定以防止更新中包含失败的提交,从而维护主分支的完整性。队列中相互冲突的拉取请求会被自动识别和排除,系统会根据需要重新分组。


GitHub 的员工产品主管 Will Smythe 和员工工程师 Lawrence Gripper 在一篇博客文章中详细阐述了 GitHub 使用合并队列的过程。除了提高开发人员的效率之外,采用合并队列的目的还在于提升开发人员在交付工作时的整体体验,防止有问题的拉取请求影响到规模更广的团队,并确保所有服务和仓库的流程一致并且高度自动化。


2021 年年中,GitHub 开始在几个较小的内部仓库中试用合并队列的功能。他们分阶段实现流程的变更,这涉及到大多数开发人员在每天清晨开始一天的主要工作之前的测试和修改恢复。随着时间的推移,到 2023 年,GitHub 系统性地将其大型 monorepo 和所有与生产服务相关联的仓库均迁移到了合并队列系统。


合并队列融入了 GitHub 现有的拉取请求工作流程,开发人员无需学习特定的 ChatOps 命令,也无需使用标签或特定注释语法进行状态管理,这增强了 GitHub 的开发人员体验。开发人员可以轻松地将他们的拉取请求排入队列,如果他们发现自己的更改有任何问题,只需单击一下即可退出队列。


在 GitHub 于 2023 年第三季度左右全面发布合并队列后,我们在 Hacker News 上看到了相关讨论。技术社区积极参与了讨论,一位用户重点介绍了他们几个月来 在 monorepo 拉取请求合并中使用该系统的情况,并对流程的实质性改进提出了肯定。他们还称赞了该系统的快速能力和基于 trunk 的可靠发布,并对该功能背后的团队表示了赞赏。


另一位用户询问合并队列是否会很快出现在 Azure DevOps 中,表示对其可用性很感兴趣。一位参与者在回复中指出 Azure Repos 缺乏更新,并指出其 SSH Git 继续依赖ssh-rsa主机密钥,而实际上 OpenSSH 已废弃该协议数年之久了。


每月,会有 500 多名工程师利用合并队列将 2500 个拉取请求集成到 GitHub 的大型 monorepo 中,这将部署变更的平均时间缩短了 33%。在 GitHub 定期进行的开发人员满意度调查中,一位工程师称赞合并队列是“在 GitHub 的变更部署方面,这是我最满意的生活质量提升之一!”


原文链接


https://www.infoq.com/news/2024/03/github-merge-queues/

2024-04-26 08:005316

评论

发布
暂无评论
发现更多内容

软件测试/测试开发 | Web自动化之显式等待与隐式等待

测试人

软件测试 自动化测试 测试开发 web测试 web自动化

为什么补码是取反加1?

Dinfan

2023我的前端面试小结

loveX001

JavaScript

vivo 自研Jenkins资源调度系统设计与实践

vivo互联网技术

运维 jenkins 资源调度

前端react面试题指南

beifeng1996

React

FL Studio2023最新版本音乐编曲制作软件

茶色酒

FL Studio2023

前端必会面试题

loveX001

JavaScript

实现一个简单的Database9(译文)

GreatSQL

sqlite greatsql greatsql社区

用Docker搭建更酷的本地开发环境

致知Fighting

Java Docker Linux 后端 开发

百度前端常考vue面试题(附答案)

bb_xiaxia1998

Vue

2023-02-12:给定正数N,表示用户数量,用户编号从0~N-1, 给定正数M,表示实验数量,实验编号从0~M-1, 给定长度为N的二维数组A, A[i] = { a, b, c }表示,用户i报

福大大架构师每日一题

算法 rust 福大大

三次握手与四次挥的问题,怎么回答?

loveX001

JavaScript

零基础入门AI?先来把机器学习捣鼓明白吧

博文视点Broadview

高级前端二面vue面试题(持续更新中)

bb_xiaxia1998

Vue

问:React的setState为什么是异步的?

beifeng1996

React

前端react面试题(边面边更)

beifeng1996

React

产品的可持续发展

ShineScrum

产品 产品负责人 产品的可持续发展

A-Ops性能火焰图——适用于云原生的全栈持续性能监测工具

openEuler

Linux 运维 操作系统 定位 性能监控

焕新启航,「龙蜥大讲堂」2023 年度招募来了!13 场技术分享先睹为快

OpenAnolis小助手

直播 开源社区 龙蜥大讲堂 机密计算 月度主题

架构实战营-模块一作业

🐢先生

架构实战营

1行Python代码去除图片水印,网友:干干净净!

程序员晚枫

Python GitHub 开源 去水印 自动化办公

一个容器,但是一整个k8s集群

newbe36524

C# Docker Kubernetes

Vue的computed和watch的区别是什么?

bb_xiaxia1998

Vue

Vue.$nextTick的原理是什么-vue面试进阶

bb_xiaxia1998

Vue

写给go开发者的gRPC教程-拦截器

凉凉的知识库

Go 微服务 gRPC http2

被流量和热度裹挟,自媒体行业必须坚守职业道德

石头IT视角

Shell分支语句

圆弧

分支 条件 shell脚本

KMP算法详解

javaadu

数据结构 字符串 KMP

为什么用元空间替代永久代?

王磊

java面试

promise执行顺序面试题令我头秃,你能作对几道

loveX001

JavaScript

老生常谈React的diff算法原理-面试版

beifeng1996

React

通过合并队列改善 GitHub 的部署_后端_Aditya Kulkarni_InfoQ精选文章