这几天分别尝试了用Travis CI和GitHub Action部署博客. 集成开发确实十分方便, 让人可以专注于写作, 而且对本地环境依赖性更小了 (在线写作也是可以的). 两者比较下来我更喜欢GitHub Action, 因为它就是Github的, 集成度更高. 而且Github Action支持的触发条件更多样一些.
先分别放上我使用Travis和GitHub Action时的配置文件
GitHub Action的缺点
可以看出Travis要更成熟一些, 提供了一些很方便的功能, 比如要添加ssh known hosts, travis只需要
1 | addons: |
而在GitHub Action中需要
1 | - name: login ssh and git |
看起来GitHub Action的配置更短, 但这句是强行不验证github.com的服务器, 并没有Travis中的配置直观, 合理.
另外GitHub Action暂时还不支持缓存, 照这个样子即便实现了也是很别扭的东西... 我觉得缓存还是一个很重要的功能. 一个最简单的例子: 没有缓存的public文件夹导致刚换到GitHub Action时我的每篇博客更新时间与我的最后一次上传时间相同 (hexo通过对比source文件夹和public文件夹的时间戳来判断更新时间). 目前我是通过将master分支下载到public文件夹来蛮力解决的.
GitHub Action的优点
当然GitHub Action的优点也是明显的, 比如我的代码的托管平台和持续集成平台合二为一, 不说管理起来方便了多少至少内心通达了😆
另外GitHub Action的支持的触发条件更加丰富, 比如用下面代码可以指定只有Root
分支有推送且有source/en文件夹以外的文件变动时才运行. 换句话说只有配置文件或者中文博客内容发生变动时才运行.
1 | on: |
在Travis的文档中我并没有看到可以这么操作.
再有就是GitHub Action支持一个项目有多个workflow, 比如我的博客就同时在运行两个工作流: 一个生成并部署中文博客, 一个生成并部署英文博客. 这是一个十分吸引人的功能! 并且GitHub正试图将workflow打造成能轻松分享, 引用的东西, 这能极大减少人们写这些繁琐低级的配置文件的时间. 实际上GitHub已经初步成功了. 在我的配置中就引用了两个GitHub官方发布的action.
1 | steps: |
目前来说GitHub Action体验着很不错!