(大部分)自动化的发布过程

(大部分)自动化的发布过程

原文:https://medium.com/hackernoon/a-mostly-automated-release-process-63bb9516985a

自动化你能自动化的事情,并分担剩余任务的责任

访问 https://www.mikenikles.com获取我的最新博文。

这篇博文是我分享我们从部署在 AWS 上的单片应用程序(每个都有自己的源代码库)迁移到部署在 Google 云平台上的分布式服务架构(所有源代码都托管在 monorepo 中)的系列文章的一部分。

  • 第一部分: 一个 monorepo,GitHub 流和自动化 FTW
  • 第 2 部分:“ [一对多——为什么我们从多个 git 回购转移到单一回购,以及我们如何设置它](/@mikenikles/one-vs-many-why-we-moved-from-multiple-git-repos-to-a-monorepo-and-how-we-set-it-up-f4abb0cfe469)
  • 第三部分(这篇文章):“一个(大部分)自动化的发布过程”
  • *第四部分: 我们对软件开发一致性的方法*
  • 第 5 部分(即将推出):“本地调试微服务”

什么是“发布过程”?

发布管理是通过不同的阶段和环境管理、计划、调度和控制软件构建的过程;包括测试和部署软件版本。 来源:维基百科

哇…这是一个很长的句子,它让我想起了我在🇨🇭.长大时写的德语句子

一种稍微不那么冗长的说法是:

“如何将代码从我的笔记本电脑转移到生产中。” 来源:

最终,一切都与代码有关,在这个过程中,我们希望对代码做某些事情。比如:

  • ;像 ESLint 这样的工具可以帮上忙。
  • 保持格式一致。更漂亮是你在这里的必备工具。
  • 运行测试。
  • 将可重用的代码打包成包,并部署到 NPM。
  • 构建利用上述包的服务。
  • 给涉众一个在或多或少安全的环境中评审代码的机会,通常被称为“阶段化”。
  • 将经过评审的代码部署到真正重要的地方:🥁…… 生产环境🎉

为什么是“自动化”?

很好的问题,很高兴你问了。主要是因为我们可以。然而更重要的是,我认识的大多数开发人员日复一日地写代码,因为当他们发布帮助他人的软件时,他们感觉很好(你的里程数可能会有所不同)。很少(从来没有?)我是否遇到过热情的开发人员,他们会说,“你知道,我就是喜欢手动将 ssh 导入我的虚拟机,运行git pull,然后运行sh ./scripts/release-carefully.sh --production=true,然后抱最好的希望🤞".

根据经验法则,

如果一项任务可以在手工执行的时间内自动完成,那么就自动完成它。现在。

原因如下:热情的软件工程师希望把时间花在处理更重要的事情上。对于软件行业的任何人来说,自动化日常任务应该是优先考虑的事情。让我们计算一下,看看为什么:

  • 将一项新功能手动部署到您的试运行环境大约需要 21 分钟。
  • 你一天做一次,一周五天。
  • 数学是这样的:21 分钟 x 每周 5 天=每周 105 分钟 x 4 周=每月 420 分钟。

Source: Google

**每月七小时是 1 个完整工作日。作为读者的一个练习,您可以添加部署到生产环境所需的时间,以及处理潜在的修补程序部署。**

比方说,你最终得到 2 到 3 个工作日的总数。与其月复一月地花费时间,不如投入到编写自动化脚本中。在第二个月,你将有 2 到 3 个额外的工作日,在那里你可以指导一个更初级的团队成员或者组织一次午餐&学习与你所在城市的社区分享你的发布自动化脚本的细节🙌。

为什么是“大部分”?

我还没有遇到过一个软件应用程序 100%自动化的发布过程。虽然这对于库、框架等来说肯定是可以实现的。对于一个应用程序来说,它是一个不同的怪兽。

至少,在我们开始自动化发布过程之前,这就是我们的工作目标,自动化发布需要两个人工批准:

  1. 部署到暂存区。
  2. 部署到生产中。

所以…这是我们发布服务的方式

记住上面的内容,下面的图表,我在本系列的第一篇博客文章中简要提到过,概述了我们的(大部分)自动化发布过程:

如你所见,我们使用 CircleCI 。使用 CircleCI 2.0 和工作流,上述内容会转化为以下[.circleci/config.yml](https://circleci.com/docs/2.0/configuration-reference/)文件:

您会注意到 7 个已配置的工作流作业,它们对应于上图中的 7 个矩形。

*我们在部署工作中调用的`yarn deploy:脚本是围绕谷歌云平台gcloud` CLI 的瘦包装器。脚本运行一些验证和一些逻辑来处理试运行和生产的情况。**

这对我们来说是全新的。它工作得很好,但是我们总是在寻找加速或者简化过程的方法。下一个主要步骤是集成一种为每个包/服务自动创建CHANGELOG.md文件的方法,并让系统在发布到 NPM 时确定合适的 semver 版本。类似于 https://conventionalcommits.org/的东西看起来很有趣🤔。

结论

这是一个有起有落的伟大旅程,但最终的结果是让我们的日常生活变得简单。

从 2018 年开始,每个微服务都将有所有者,一个至少由两名开发者组成的团队。作为服务所有者,遵循“您构建它,您运行它”的原则。通过这篇博文中描述的发布过程,每个拉请求在被合并到master之前都被部署到生产中。所有者不仅要负责开发,还要负责服务的部署、监控和支持。如果有 bug,公司的任何人都可以在他们不拥有的服务中打开 PRs。尽管服务所有者将拥有批准 PRs 的最终决定权。

如果您对上述方法有任何问题、想法、建议等,请告诉我。我很乐意讨论和学习其他人如何部署到生产中。


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除