2019年,Shopify在博客中分享了他成功合并数千名开发者工作的经验,并介绍了工具MergeQueuev2。很多人疑惑为什么Shopify会打造这样一个工具?其实答案很简单。很多企业发展到一定阶段后都会遇到这样的情况。随着业务的增长,Shopify意识到市场上没有现成的产品可以彻底解决他们面临的困难。从长远来看,Shopfiy认为公司应该为开发者提供尽可能最好的开发体验,并营造一种“软件发布文化”,因此开始不断完善现有的工具链和流程方法。Shopify是这样定义企业文化的:Shopify每个人的信念和行为的总和。软件发布工作是开发工作的一个子集,“软件发布文化”自然也应该与企业文化保持一致。Shopfiy的软件发布工作规范与其他公司没有太大区别。比如,他们要求错误的变更不能流入生产环境,破坏用户体验;在生产环境中所做的更改不应牺牲安全性等。通向罗马的道路不止一条,同样的软件出版文化也有许多条可供选择的道路。Shopify认为,企业支持团队应该为开发人员开辟一条提高生产力、创造力和实现目标的道路。组织应该营造一种氛围,让发布成为胜利的时刻。1.Shopify如何评估软件发布文化如何塑造软件发布文化?先考虑以下问题:开发者想选择怎样的工作方式?什么事情对他们来说更重要?他们对用于支持他们的工具有何看法?他们想知道多少幕后信息,他们使用的工具背后有多少知识?这些问题通常没有单一的答案,尤其是在Shopify,一家每天都有许多人以各种角色参与软件部署的公司。Shopify选择了多种主动和被动方法(排名不分先后)来评估企业内的软件发布文化,它们共同描绘了开发人员如何使用各种工具的图景。其中,被动方式主要用于管理和汇总输入信息,不需要企业支持团队做大量工作。其中一种方法是开发人员满意度调查,这是对Shopify全公司开发人员进行的半年一次调查。开发者需要汇报很多信息,比如他们对自己使用的工具的满意度,或者他们工作的哪些部分是耗时的等等。此外,公司有专门的Slack频道对所有人开放。在这个频道上,产品用户可以得到开发团队或其他用户的支持,并报告他们遇到的问题。Shopify团队积极参与这些渠道,培养社区意识并鼓励开发人员分享经验。请务必注意,这些渠道不是用于获取产品反馈的主要渠道。一般来说,他们希望主动识别其产品和服务中的痛点,并且意识到这个过程不能过度依赖用户,Shopify还采取了一些主动步骤来识别最重要和优先级最高的问题。一种措施称为dogfooding。公司开发团队发布代码所使用的工具与构建和维护代码所使用的工具完全相同。这样可以轻松识别服务的不足之处,并在出现产品问题时从用户的角度了解影响。另一个重要资源是Shopify的内部支持团队。他们需要帮助用户,同时也支持企业内不断增长的工具套件,这是一项艰巨的挑战。他们需要诊断问题并帮助用户找到合适的团队来指导他们解决这些问题。他们能够识别用户在当前工作流程中遇到的常见痛点以及概念和原型的潜在问题。最后,在添加新功能或更改现有工作流程时,Shopify会在整个过程中实施UX研究分析:更好地了解用户行为和期望在开发时测试概念和原型当开发人员发布PR时,团队会单独检查开发人员的想法以了解他们在想什么以及他们在做决定时有什么依据。该团队与设计师和撰稿人等用户交谈,了解他们的日常工作流程、他们所依赖的工具以及如何使用它们。公司与实习生和新人一起测试产品原型,获得外部和新鲜的观点,并挑战现有的产品假设。有了这些流程,企业可以通过在整个构建和发布过程中从真实用户那里获得第一手反馈来构建更好的产品和服务。反馈是礼物Shopify常说反馈是礼物。评估软件发布文化的目标是创建一个反馈循环,用户可以在其中轻松谈论他们遇到的障碍,而收到反馈的开发团队重视这些评论并试图反击它们。还有一点很重要,用户的反馈会激励产品团队。即使反馈是负面的,也是用户重视产品并希望产品变得更好的证明。这自然会鼓舞团队,甚至让他们在逆境中振作起来。用户希望他们的反馈有价值。这就是企业要为用户营造的氛围。公司的软件开发文化和工具链应该支持这种良性循环,让每个人都能从中受益。2.Shopify的软件发布流程Shopify的软件发布流程是怎样的,哪些地方可以改进?发布管道PublishPipelinePath这是Shopify发布管道的路径。它从拉取请求(PR)开始,然后是持续集成(CI)/合并,然后是金丝雀部署,最后是生产发布。PR和/shipit流程的第一步是让开发人员创建PR,然后在准备好发布时发出/shipit命令。接下来,MergeQueue系统会尝试将PR与trunkMaster整合。PR合并到Master,金丝雀部署当MergeQueue确定变更可以成功集成时,将PR合并到Master并部署到Shopify的金丝雀基础设施。金丝雀环境随机接收所有传入请求的5%。部署到生产环境的变更开发人员有一套工具可以在金丝雀环境中测试变更10分钟。在没有人工干预的情况下,如果金丝雀自动分析没有触发任何警报,更改就会部署到生产环境中。发布和恢复机制每个开发人员都希望得到信任并对其工作拥有自主权。开发人员应控制其PR的整个发布过程。开发者全程掌控在Shopify的软件发布流程中,开发者掌控着整个发布过程。没有发布管理器、注销或审核窗口。限制不良变化爆炸半径的基础设施然而,人类会犯错误和出现问题是不可避免的,Shopify当然也不例外。为此,该公司构建了一个基础架构来限制不良变更的爆炸半径。最重要的是,企业认为每个开发人员都应该承担责任,如果他们的更改失败,他们应该能够自己恢复。开发人员可以使用/shipit--emergency命令快速跟踪修复一旦修复准备就绪(修复-转发或还原),开发人员可以使用单个/shipit--emergency命令快速跟踪整个修复过程。Shopify没有那么多恢复协议,只有一个应急功能,可以让开发者尽快完成恢复操作。快速发布开发人员需要快速发布。发布速度是大多数企业应用程序的关键要素。对于开发人员而言,能够每天多次发布代码并立即将其交付给最终用户可以极大地提高生产力。但更重要的是,采用快速发布流程会带来同样快速的恢复流程。为了真正加快发布进程,企业需要投入资源和成本。除了专门的基础架构团队外,Shopify还管理着自己的CI集群,其容量高达数千个节点。自动化开发人员不想执行重复性任务。计算机最擅长重复性的工作,所以这类工作应该尽可能自动化。Shopify自动化诸如持续部署和金丝雀分析之类的事情。在Shopify中,无需开发人员按下部署按钮,自动化流程会持续部署到Canary和生产环境。自动化很棒,但有时开发人员需要手动控制。在紧急情况下,开发人员可以锁定自动部署并切换到手动部署。
