(本文翻译自http://www.paperplanes.de/2013/10/18/the-smallest-distributed-system.html,由@金斌_jinbin 翻译)
Travis CI一开始仅仅是个想法,在当时甚至还有些理想化。在这个项目启动之前,开源社区还没有一个可用的持续集成系统。
随着作为开源协作平台的Github越来越被人认可,Github也非常需要可以持续对贡献代码进行测试的服务,来保证一个开源项目始终处于稳定健康的状态。
Travis CI开始于2011年初,而且很快得到了一些试用客户。到了2011年夏天,我们每天进行700次构建。所有这些构建都是在一台构建服务器上进行的。Travis CI跟Github完美集成,目前Github还是Travis CI的主要平台。
Travis CI在持续集成领域并没有惊天动地的大动作,但它的确重新定义了一些原有的概念,并增加了一些新的想法。其中一个就是你可以在你的测试运行过程中,接近实时的看这个项目的构建日志流。
最重要的一点,Travis CI允许你通过源码里的文件(.travis.yml)来对构建过程进行配置,而不是复杂的用户界面。
Travis CI一开始的架构很简单。通过Web组件可以让项目和它的构建过程可见,同时,只要一个新的commit提交到了项目,Travis CI就可以接收到来自Github的消息,从而触发构建。
另外一个叫做hub的组件,是负责处理新的提交,将他们转化成一次构建,并且处理构建任务运行和结束时产生的结果数据。
这两个组件都是跟PostgreSQL数据库打交道。
第三部分就是用来控制构建任务本身的线程集合,它们可以用来在虚拟机实例上执行一系列的命令。
本质上,hub会显得比其他部分稍微复杂一些。当hub处理构建日志时,它需要与RabbitMQ进行消息传递。日志会以chunks流的形式从控制构建任务的线程中得到。
Hub更新数据库中的日志和构建结果信息,并且hub推送他们到Pusher。通过Pusher,Travis CI可以在构建开始或结束的时候更新用户界面。
这样的架构一直维持到了2012年,当时我们每天进行7000个构建任务。我们欣喜的看到Travis CI在开源社区越来越广泛的使用,并且开始支持11种语言,包括PHP,Python,Perl,Java 和 Erlang。
随着越来越多的使用,Travis CI越来越像是一个开源项目的必备服务了。但是不幸的是,这个系统从一开始构建的时候就没有考虑过监控。
过去,总是来自社区的用户通知我们系统没有正常运行,构建任务遇到异常,或是任务信息没有被处理好。
那可真是令人尴尬。我们的第一个挑战就是给系统增加监控,数据指标和日志,让Travis CI从一个业务爱好的项目转变为一个重要的商业平台。我们准备发布Travis CI的正式生产版本。
被用户告知系统没有正常运行直到今天仍然是我最大的噩梦,我们不得不努力工作建设好数据监控,以使系统能够在出现问题的一开始就及时通知。
如果没有任何数据记录或者良好的日志,我们根本不可能去搞清我们这个小分布式系统到底发生了什么。无论是从哪个方面看,Travis CI都已经是一个分布式系统了。
加入监控指标和日志是一次循序渐进的学习过程,但是最终,它们让我们可以了解这个系统正在做什么,无论是通过图表还是日志。
这对我们而言是一个巨大的提升。可见性对于运行一个分布式系统是非常重要的。
当你写一个系统时,考虑好如何监控它。
做好监控会有助于你的系统更好的在生产环境运行,而不仅仅是通过测试。
关键是,更多的监控不仅仅是让你可以对系统更了解,你也会发现那些你以前未曾想到或见到的问题。系统更高的可见性带来更多的责任感。现在我们需要去面对这样的事实:我们对系统的错误有了更多的了解,所以我们必须更有效的工作来减少这些错误所带来的影响。
相关推荐
开源项目-travis-ci-travis-ci.zip,[travis CI]: Go 1.10 is parsed as 1.1 if not passed as strings
hello-travis-ci:Travis CI教程,主要介绍如何使用Travis CI的检验代码功能和代码审查功能。 Travis CI的教程主要介绍如何使用Travis CI的检查代码功能和Code Review功能
后台的Travis CI插件 特征 列出Travis CI构建 触发生成 如何将Travis-ci项目依赖项添加到Backstage应用程序 如果您有不带此插件的后台应用程序,请按照以下说明进行添加: 在backstage/packages/app项目中,将该...
使用travis CI自动打包APK,并上传到fir,整个步骤执行成功的打印日志,帮助学习者分析错误问题。
travis.rb, Travis CI客户端( ruby 和库) Travis客户 Travis包含一个 命令行 客户端和一个 ruby 库插件,与 Travis CI服务接口。 无论你是使用 travis-ci.org, travis-ci.com 还是任何定制 Travis CI设置,你
用户可以设置默认值并将逻辑直接包含在Travis::Config类中,也可以将其扩展到例如Travis::Logs::Config 。 例如 require 'travis/config' module Travis class Config < Hashr define host : 'travis-ci.org'...
travis-minikube:在Travis CI上运行minikube
Drupal / Travis CI 演示 该项目将在 GitHub 上演示基本的 Drupal/Travis-CI 集成。 目前展示的功能: 通过 Ansible 和/或 git 安装 Drupal 和 drush。 Drupal 核心测试通过 drush(simpletest 和 PHPUnit)运行...
haskell-ci:Travis CI和Appveyor模板,用于测试Haskell应用程序并发布二进制发行版
字符串化-travis-徽章 从对象生成 Travis CI 徽章。使用安装npm i stringify-travis-badge --save用法 var travis = require ( 'stringify-travis-badge' ) ;travis ( 'assemble' , 'verb' ) ;//=> [![Build Status]...
从2020-11-25开始,我的项目不再使用Travis CI。 相反,我在GitHub Actions中使用 。 保持此仓库8年后,我很高兴通过接力棒。 如果您愿意并有能力支付Travis CI,您可能仍然会发现此回购很有用。 你可以分叉。 有...
tox-travis, Travis CI无缝集成 毒理检测Travis和 Travis Tox Travis是一个毒性测试插件可以简化毒物检测和Travis之间的设置。用法配置 python 版本以在 .travis.yml 中测试,并使用pip安装 tox-t
该Ember插件为您提供了实用程序,用于检索任何公共Travis CI回购的构建状态,以及可根据返回的状态显示动态内容的组件。 构建状态会缓存在应用程序会话中,以避免不必要的API调用。 内容 安装 ember install ember...
Travis CI Webhook 简单的Webhook即可验证Travis CI通知并运行命令
Travis CI cron触发器该项目允许定期触发构建,例如测试刮板。 在Travis,他们最终将实现cron(ref: ),同时,我希望这会有所帮助:)技术上该项目由两部分组成: 一个Django网络应用程序(在运行),允许用户将新的...
Travis CI monorepo演示 该存储库是有关使用构建Monorepo项目的实验。 如果您对其他CI选项感兴趣,请确保签出我的。 这个怎么运作? 它利用Travis矩阵功能,在.travis.yml我们在.travis.yml为不同项目位置定义...
Travis CI对流星包运行速度测试的支持,已通过以下测试茉莉花,但也应与摩卡咖啡搭配使用。 指示 执行以下步骤,将travis ci测试添加到您的项目中: 将.travis-example.yml复制到您的软件包目录,将其重命名为....
从参数列表或对象生成 Travis CI URL。 使用安装 npm i stringify-travis-url --save 用法 var travis = require ( 'stringify-travis-url' ) ; travis ( 'jonschlinkert' , 'micromatch' ) ; //=> '...
Travis API 警告!!!!! Master分支仅适用于.com。 如果您想为.org部署更改,请使用org-only分支 要求 您需要以下软件包才能使travis-api正常工作: PostgreSQL 9.3或更高版本 邦德勒 雷迪斯 可选: RabbitMQ...