跳到主要内容
HHuan Du
4 分钟阅读

Travis CI 免费午餐快到期了,怎么办?

travis-ci.org 关停、credit 按量扣除之后,我试了 Circle CI,并把几十个仓库的构建配置迁移过去。

  • #ci
  • #open-source

对于一个闲来写写码的佛系开源作者来说,自动构建系统(CI)是保持佛系开发的必要基础设施。当有热心开源贡献者提交 PR 时,我只需要简单 review 代码并检查 unit test 在 CI 上的执行情况,没问题的话写上一个 Thanks for your contribution 就可以大胆将代码并入主干,完成代码的自然演进。如果没有这套机制,我就得自己将代码下载到本地,搭环境验证代码,最后还得手动 merge + commit,很是麻烦。况且我还维护了 Go 语言最常用的 Facebook Graph API 库,不少 case 还得用梯子测试,麻烦×N。可以这么说,没有 CI 就会降低我不少的开源热情。

Ci 是需要云服务器来执行各种代码逻辑的,自己搭建 CI 集群既费事又费钱,幸好开源界有好几个免费 CI 集群可用,多年来我一直使用 Travis CI 的服务,功能简洁又可靠,还一直保持完全免费,我有数十个项目都用它,跟其他人也一般推荐他家的服务。

不过最近登录 Travis CI 后发现,免费午餐就要到头了。

Travis CI 提示 travis-ci.org 将在数周内关闭,所有账号迁移到 travis-ci.com

简单的说,原来免费的 travis-ci.org 即将关闭,迁移到 travis-ci.com 之后我只有可怜的 10000 个免费 credit,这些 credit 不会自动增加,每次构建最少花费 10 个 credit,用一次少一点。我光是将项目迁移到 travis-ci.com 并完成初次验证性构建就花费了 180 个 credit,未来,收到一个 PR 花 10 个,合并花 10 个,打个版本 tag 再花 10 个,恐怕不出一年这些免费 credit 就见底了。

出于这么多年老用户的感情,为 Travis CI 付费也不是不可以……但这价格也太感人了,69 刀一个月呀,这一个月的钱都够买一台阿里云服务器整整一年了,消费有点太不划算了。

Travis CI 的付费方案:免费版、每月 69 美元的 1 Concurrent plan 和每月 129 美元的 2 Concurrent plan

当然,佛系开发者还是应该将佛系进行到底,除了 Travis CI 之外还有其他免费 CI 系统,我将目光看向 Circle CI。

Circle CI 也是一个有好几年历史的免费 CI 平台,与 Travis CI 不同,这个平台更像是一个简化版的 k8s 控制器,里面的配置需要花很多时间研究他们家独有的 config.yml 才能很好的驾驭 CI 过程,远比 Travis CI 门槛高,对于佛系开发者来说为何要为这种对开发者体验不够好的产品浪费时间呢,本来我是觉得就算没 CI 可用,自己搭服务器也不会去研究他家服务的,不过我看了下 Circle CI 的免费方案之后,「真香」。

Circle CI 的免费方案:每周 2500 个免费 credit,一次只能跑一个构建

每周都能有 2500 个免费 credit!构建一次才消耗几个 credit!对佛系开发者来说真的很好了。

而且,现在 Circle CI 也有很好的 GUI 功能来方便开发者无脑创建 config.yml,对于一个新项目来说已经足够方便了。

Circle CI 的 config.yml 编辑器,直接选用 Go 模板并提交运行

不过 Circle CI 还是有很多需要注意的地方,要想在这里实现所有 Travis CI 已有的功能(甚至是基本功能),还得用上最新的 Circle CI version 2.1 API 才实现,花了我好几个小时研读所有文档并花费几百个 credit 做实验才搞定。考虑到这篇文章已经有点长了,我之后再专门写一篇文章来介绍吧。

考虑到我写文章的速度也很佛系,如果等不及的小伙伴可以看一下 https://github.com/huandu/go-tls 项目的源码,里面的 config.yml 仅仅是为了实现 Travis CI 下面的配置文件同等效果。

language: go
go:
  - 1.7.x
  - 1.8.x
  - 1.9.x
  - 1.10.x
  - 1.11.x
  - 1.12.x
  - 1.13.x
  - 1.14.x
  - 1.15.x
  - tip

由于现在 Travis CI 会为每一个 Go 版本开一个虚拟实例,上面这个配置在 Travis CI 上执行一次就会消耗 10×10 = 100 个 credit,想想都心疼,于是就有了现在的 config.yml 解决了问题。

具体的原理介绍就未来有机会再说吧,再见。

本文最初于 2020-12-27 发布在知乎