《Github Actions or Jenkins? Making the Right Choice for You》 一文作了一个「客观」的对比,时髦的 GitHub Actions 让人期待,于是我将 Jenkins 及 GitHub Actions 应用到几个服务中进行体验。

  1. 静态博客构建及发布
  2. 自动更新及部署 HTTPS 证书
  3. 使用 Docker 构建镜像及蓝绿部署

对于简单的执行逻辑,如博客构建、定时更新证书,触发条件清晰,执行流程简单(使用 Shell 命令行轻松实现),GitHub Actions 和 Jenkins 的相关集成都较为简单,可优先选择 GitHub Actions

对于一个相对复杂的程序构建 + 部署,一段时间体验下来,我弃用了 GitHub Actions,原因如下:

  1. Jenkinsfile 可以用 Groovy / Java 编写流程逻辑,配合 IntelliJ IDEA 可以高效准确地编写逻辑代码,而 GitHub Actions 的 YAML 内容维护如同用记事本写代码,在流程判定分支较多的情况下,流程代码编写尤其吃力
  2. GitHub Actions 每次构建、每个步骤都在不同的容器中,这既是优点也是缺点,缺点是不能高效利用既有内容(缓存)。Jenkins 每次构建均共享一个操作系统,在频繁的 Docker 镜像构建中,可以利用到缓存使其快速构建;而 GitHub Actions 每次构建均需要漫长的等待,影响开发体验
  3. GitHub Actions 严格按照 workflow 定义的触发条件,这既是优点也是缺点,缺少手动触发的方式使一些调试较为耗时
  4. GitHub Actions 按分钟耗时计费,$0.008 / minute 的单价并不便宜,GitHub Pro 每月 3000 分钟免费用量尚不能满足我的个人需要(多数时候构建耗时长只是因为 GitHub Actions 没有本地缓存所致),在一个业务高速迭代的多人团队中(相关费用由并不富裕的小老板自掏腰包),即使以每月 5w 分钟来算也需支付 400 美元,而满足此需要的 Jenkins 云服务器每月费用在 50 人民币以内