写点什么

揭秘 Shopify 的软件发布流程,如何做到合并上千程序员的工作?

  • 2020-04-23
  • 本文字数:2875 字

    阅读完需:约 9 分钟

揭秘Shopify的软件发布流程,如何做到合并上千程序员的工作?

2019 年,Shopify 在博客中分享了自己成功合并千名开发人员工作的经验,并介绍了工具 Merge Queue v2,很多人都好奇为什么 Shopify 要构建这样的一款工具呢?


其实答案很简单,不少企业发展到一定阶段后就会遇到这样的情况。随着业务发展,Shopify 意识到市面上没有任何现成的产品可以彻底解决他们面临的困难。从更长远地来看,Shopfiy 认为公司应该为开发人员提供尽量完善的开发体验,并要塑造一种"软件发布文化",所以就开始不断改进现有的工具链和流程方法。


Shopify 是这样定义企业文化的:


Shopify 所有人信念和行为的总和。


软件发布工作是开发工作的子集,自然,"软件发布文化"也要和企业文化保持一致。Shopfiy 的软件发布工作规范与其他企业没有太大不同,比如他们要求错误的更改不应该流入生产环境,破坏用户体验;生产环境中所做的更改不应该牺牲安全性等等。


通往罗马的道路不止一条,同样的软件发布文化,也有很多可选的实现路径。Shopify 认为,企业支持团队应该为开发人员开辟一条路径,让他们自由发挥生产力和创造力,并实现自己的目标。企业应该营造一种氛围,让版本发布成为一种胜利时刻。

Shopify 如何评估软件发布文化

如何塑造软件发布文化?首先要考虑以下问题:


  • 开发人员希望选择怎样的工作方式?

  • 对他们来说哪些事情比较重要?

  • 他们如何看待用来支持他们的工具?

  • 他们想知道多少幕后信息,想了解多少自己使用的工具背后的知识?


这些问题往往没有单一的答案,尤其是 Shopify 这家企业中每天参与软件部署工作的人员众多,涉及的岗位也多种多样。Shopify 选择了一些主动和被动的方法来评估企业内部的软件发布文化,这些方法不分先后,它们共同描绘出了一幅关于开发人员如何使用各种工具的图景。



其中,被动方法主要用来管理和汇总输入的信息,并不需要企业支持团队去做很多工作。其中,有一个方法是 开发人员满意度调查,这是对 Shopify 全公司的开发人员每半年进行一次的调查研究。开发人员需要报告很多信息,比如说他们对自己所使用的工具的满意度,或者工作中哪些环节非常浪费时间等等。


此外,公司还专门设立了面向所有人开放的 Slack 频道。在这个频道上,产品用户可以从开发团队或其他用户那里获得支持,并报告他们遇到的问题。Shopify 团队会积极参与这些频道的互动,培养社区氛围并鼓励开发人员分享经验。需要注意的是,这些频道并不是用来获取产品反馈的主要渠道。


总的来说,他们希望能主动找出产品和服务中的痛点所在,而且意识到了这个过程并不能过分依赖用户,因此 Shopify 也采取了一些积极的措施来找出最重要、优先级最高的问题。


一种措施叫做 dogfooding。公司内开发团队用来发布代码的工具是和构建与维护代码的工具完全一致的。这样就很容易找出服务的缺陷所在,并在出现产品问题时站在用户的视角上理解其影响。


另一项重要资源是 Shopify 的 内部支持团队。他们需要帮助用户,还要支持企业内部不断发展的工具套件,这是很艰巨的挑战。他们需要诊断问题,帮助用户找到合适的团队来指导他们解决这些问题。他们能够找出用户在当前工作流程中遇到的常见痛点以及概念和原型的潜在问题。


最后,在添加新功能或更改现有工作流程时,Shopify 会在整个过程中实施 用户体验研究分析


  • 更好地了解用户行为和期望

  • 在开发概念和原型时测试它们


当开发人员发布 PR 时,团队会单独考察开发人员的想法,了解他们都在考虑哪些内容,在制定决策时都有怎样的根据。团队会与设计师和撰稿人等用户交流,学习他们的日常工作流程,了解他们所依赖的工具和用法。公司会让实习生和新人测试产品原型,从中了解外部和新鲜视角的观点,并挑战原有的产品假设。


有了这些流程,企业就能在整个构建和发布过程中都能从真实用户那里获得一手反馈,进而打造更好的产品和服务。


反馈是一种礼物 在 Shopify 经常提到的一句话就是,反馈是一种礼物


评估软件发布文化的目的是创建一个反馈循环,让用户可以轻松谈论他们遇到了哪些障碍,收到反馈的开发团队会重视这些意见并尝试采取对策。


还有很重要的一点是,用户的反馈会让产品团队充满动力,即便反馈是负面的,这也是用户重视产品、希望产品变得更好的一种证明,这自然会鼓励团队,甚至让他们在面对困境时振作起来。用户希望自己的反馈能有价值,这是企业要给用户营造的氛围,企业的软件开发文化和工具链应该支持这种良性循环,让所有人都能从中获益。

Shopify 的软件发布流程

Shopify 的软件发布流程是怎样的形态,又有哪些可以改进的部分呢?

发布管道


发布管道路径


这就是 Shopify 发布管道的路径。一开始是拉取请求(PR),然后是持续集成(CI)/ 合并,接着是金丝雀部署,最后是生产发布。



PR 和 /shipit 命令


这套流程的第一步是开发人员创建 PR,然后在准备交付时发出一条 /shipit 命令。接下来,Merge Queue 系统会尝试将 PR 与主干 Master 集成起来。



PR 合并到 Master,金丝雀部署


当 Merge Queue 确定更改可以成功集成时,PR 就会合并到 Master,并部署到 Shopify 的金丝雀基础架构中。金丝雀环境会随机接收所有传入请求的 5%。



更改部署到生产环境


开发人员有一套工具,可以在金丝雀环境中测试更改 10 分钟的时间。如果没有手动干预,并且金丝雀自动分析不会触发任何警报,则更改将部署到生产环境中。

发布与恢复机制

每一位开发人员都希望能被信任,并对自己的工作拥有自主权。开发人员应该能控制自己 PR 的整个发布过程。



开发人员控制整个过程


在 Shopify 的软件发布流程中,开发人员能控制整个发布过程。这里不存在什么发布管理器、注销或者审核窗口。



限制不良更改爆炸半径的基础设施


然而是人就会犯错,出现问题是难免的,Shopify 当然也不例外。为此,公司建立了一套基础架构来限制不良更改的爆炸半径。最重要的是,企业相信每位开发人员都应该承担自己应负的责任,并且如果他们的更改捅了篓子,他们也应该能自己去恢复它。



开发人员可以使用 /shipit--emergency 命令快速跟踪修订


一旦准备好了修复程序(修复 - 转发或还原),开发人员就可以使用一条 /shipit --emergency 命令快速追踪整个修复进程。Shopify 没有那么多恢复协议,而只有一个 紧急状况 功能,这样就能让开发人员以最快的速度完成恢复操作。

快速发布

开发人员希望快速发布。



发布速度是大多数企业应用程序的一个关键要素。对于开发人员而言,如果能一天多次发布代码并立即将其发送给最终用户,就能极大提高生产力。但更重要的是,采用快速的发布流程可以带来同样快速的恢复流程。



为了真正加快发布过程,企业是需要投入资源和成本的。除了专门的基础架构团队,Shopify 还管理着自己的 CI 群集,容量高达数千个节点。

自动化

开发人员不想执行重复性的任务。计算机最擅长做重复工作,所以这类工作应该尽可能地自动化。Shopify 在诸如连续部署和金丝雀分析之类的地方实现了自动化。



在 Shopify,开发人员用不着按一个部署按钮,自动化流程会持续部署到金丝雀和生产环境。



自动化固然很棒,但是某些时候开发人员还是需要手动控制的。在紧急情况下,开发人员可以锁定自动部署并转为手动部署。


原文链接:


https://engineering.shopify.com/blogs/engineering/software-release-culture-shopify


2020-04-23 16:075880

评论

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

面试官问:JS的继承

若川

JavaScript 前端 前端开发

面试官问:JS的this指向

若川

JavaScript 前端 前端开发

面试官问:能否模拟实现JS的new操作符

若川

JavaScript 前端 前端开发

一种低成本增长私域流量,且维护简单的方法

Geek_99967b

小程序 电商

如何系统学习LabVIEW?

不脱发的程序猿

​LabVIEW LabVIEW机器视觉 ​LabVIEW工业控制 ​LabVIEW单片机 ​LabVIEW开发技巧

直播带货平台包含了直播和娱乐模块,你知道是什么吗?

开源直播系统源码

软件开发 直播带货系统

声网 VQA:将实时互动中未知的视频画质用户主观体验变可知

声网

人工智能 音视频

毕业总结

小虾米

「架构实战营」

从小到大为何一谈学习就愁眉苦脸

宇宙之一粟

学习 6月月更

怎样能低成本构建一个电商平台

Geek_99967b

小程序 电商

设计电商秒杀系统

小虾米

「架构实战营」

SpringCloud - Feign核心源码解析

码农参上

微服务 SpringCloud spring 源码

行业分析| 快对讲,楼宇对讲

anyRTC开发者

音视频 快对讲 语音对讲 视频对讲 楼宇对讲

去哪儿网(Qunar) DevOps 实践分享

laofo

DevOps cicd 研发效能 持续交付 工程效率

要搞清楚什么是同步,异步,串行,并行,并发,进程,线程,协程

乌龟哥哥

6月月更

COSCon'22 讲师征集令

开源社

开源

Fabric.js 笔刷到底怎么用?

德育处主任

canvas 前端可视化 画布 FabricJS 6月月更

fastposter v2.8.4 发布 电商海报生成器

物有本末

海报生成器 电商海报 海报生成 图片合成

使用 ABAP 操作 Excel 的几种方法

汪子熙

microsoft Excel Office SAP 6月月更

【使用Python实现算法】02 原生类型与内置函数

★忆先★

Python 算法题

OpenHarmony应用开发之二维码生成器

坚果

鸿蒙 OpenHarmony OpenHarmony 3.1 Release 6月月更

一种跳板机的实现思路

vivo互联网技术

权限 跳板机 PAM机制

面对 this 指向丢失,尤雨溪在 Vuex 源码中是怎么处理的

若川

JavaScript Vue 前端 前端开发 vuex

Prometheus 2.35.0 新特性

耳东@Erdong

release Prometheus 6月月更

Ubuntu下安装OpenJDK10

程序员欣宸

Java Openjdk 6月月更

SpringCloud - Ribbon核心源码解析

码农参上

微服务 SpringCloud spring 源码

如何使用 DataAnt 监控 Apache APISIX

API7.ai 技术团队

后端 监控 APISIX 网关 DataAnt

Scala 基础 (三):运算符和流程控制

百思不得小赵

scala 大数据 6月月更

JavaScript 对象所有API解析

若川

JavaScript 前端 前端开发

在IDEA配置Tomcat你GET到了吗

迷彩

调试 IDEA tomcat构建 开发工具 Web 6月月更

模块化开发

Jason199

js 模块化 6月月更

揭秘Shopify的软件发布流程,如何做到合并上千程序员的工作?_软件工程_Jack Li_InfoQ精选文章