Statuspage如何利用Bitbucket和Sleuth进行连续部署

82 阅读5分钟

这篇文章的作者是Michael Knighten,Sleuth公司的创始人兼首席运营官。


持续部署需要什么

连续部署和在快车道上开车有一些相似之处。

开车时,你需要时刻保持警惕,积极主动地观察道路上的潜在危险。当你看到它们时,你需要能够立即做出反应,踩下刹车,并灵活地改变路线。

在持续部署时,团队也需要保持警惕,并善于协调和跟踪部署,以避免或解决生产问题。

这些活动可能包括:部署到预生产环境,当另一个部署正在进行并可能发生冲突时阻止一个部署,以及--就像在快车道上行驶一样--监测每次部署后可能需要补救的问题。

典型的部署协调工作是在你的Bitbucket工作流程和管道之上的一层人工干预,对于工具化和一些自动化来说是完全成熟的。

在这篇文章中,我们将概述Statuspage(Atlassian的事件管理解决方案)的部署流程和工具,它用来协调部署工作,每天6-8次运送到生产。

Statuspage的部署流程

Atlassian的Statuspage工程团队在部署过程中使用了许多工具,包括Bitbucket、Jira和Confluence,用于源代码控制、问题跟踪和CI,以及Sentry、SignalFx等可观察工具,用于错误和性能监控。此外,还包括Pollinator,这是一个内部监控工具,可以跟踪查看特定页面是否可达并运行测试,以及用于部署任务控制的Sleuth。这个工具链是广泛的,并不断发展,但它们有一个共同的目的:使部署快速、简单,并对开发人员安全。

Statuspage的部署过程是这样的:

  1. 开发人员创建一个分支,并将代码修改推送到Bitbucket,这将触发Bamboo运行构建。当他们得到一个绿色的构建时,他们会打开一个拉动请求。
  2. 当拉动请求被审查和批准后,开发人员将其合并到主代码库中。
  3. 奔步启动了对暂存和生产环境的部署。为组成Statuspage的每个服务创建一个由负载均衡器支持的新的自动扩展组。
  4. 一个自制的Atlassian PaaS运行一个Docker镜像,执行一系列的语义检查。当检查通过后,现有的自动扩展组的流量就会被路由到新创建的组中。

在Statuspage,所有这些都发生在上午9点到下午3点半之间,其他时间他们都处于严格的 "不要合并 "命令之下。

"这有助于开发人员保持理智,"Statuspage的架构师Caspar Krieger说。

"每个人都有这种倾向,希望他们所做的任何改变都会很好。但有时......他们错了。而且他们在,比如说,晚上6点的时候部署了它。然后碰巧在待命的人就因为部署问题而被吵醒了。"

"他说:"人们被实际的、合法的警报吵醒已经够了。"让我们不要让与变化有关的警报成为另一个唤醒的理由。"

许多团队已经在他们的工具链上投入了时间、金钱和精力。虽然每个工具都有其作用,但像Statuspage这样的团队越来越多地使用Sleuth来协调和跟踪部署的健康和进度。

使用Sleuth协调部署工作

为了执行部署计划,Statuspage使用了Sleuth的 "锁定 "功能,该功能可以阻止在指定的时间范围之外或在团队想要暂停部署的任何时候向生产中发送更改。事实证明,使用这一功能是一个改变游戏规则的因素。

Caspar说,在使用Sleuth之前,Statuspage依靠Slack来发送部署结束的消息。但并不是每个人都会收到这个消息。

有时,毫无戒心的开发者会点击他们的拉动请求上的 "合并 "按钮,并将他们的修改发送到生产中。这通常会导致一场混战。

"Caspar说:"使用Sleuth已经很好地阻止了这种情况的发生。

虽然Sleuth有一个自动锁定选项,但Statuspage团队更喜欢手动锁定部署,原因是什么?他说:"这是一个很好的功能"。在锁定期间,甚至没有人可以点击Bitbucket拉动请求的 "合并 "按钮。

查看已发货的内容及其影响

Statuspage使用了一些工具,如Sentry和SignalFX,以帮助团队在部署后立即知道是否出了问题。这是有道理的--毕竟,每天发货八次意味着错误可能会在Statuspage的客户中出现八次。

Sleuth帮助组织这些工具从部署角度收集的数据。这一点很重要,因为每当这些工具检测到问题时,这些问题往往可以被追踪到特定的部署上。

通过将来自Sentry、SignalFx及其内部工具的错误和指标数据汇总到一个屏幕上,Sleuth为Statuspage的开发者提供了一个简单的方法来跟踪每个部署的影响。

例如,它允许开发人员看到,他们刚刚部署的代码导致了错误率和内存使用的增加,但与既定的基线相比,还没有达到需要补救的程度。换句话说,这个部署是 "健康的"。

相反,因为开发人员现在可以立即知道部署是不健康的,他们可以确保他们不会使问题恶化。

"当糟糕的事情发生时,"卡斯帕说,"你想有一种方法来阻止人们使糟糕的事情变得更糟。

在发货和健康之前,一切都还没有完成

Statuspage的团队持续部署,这意味着他们的开发人员要对自己的部署负责。

他们希望使用的工具能让他们对部署有清晰的认识和控制。与Bitbucket和Bamboo一起,Sleuth是这项工作的完美工具。