利用 GitHub Actions 自动部署 Hexo
GitHub Actions 由 GitHub 官方推出的CI/CD工具,同类型的工具有Travis CI和Netlify,前两个玩过自动部署的应该都或多或少的用过,Netlify或许用的人更多一点,支持私有仓库、自带静态服务器、自带CDN。不过既然GitHub也推出了自己的工具,那也是要折腾折腾的,毕竟是自己家的东西,可玩性应该要高于其他两个。
生成ssh-key
因为自动部署是从A仓库触发action将内容部署到B仓库,所以需要一个部署的秘钥,以避免无法访问仓库的问题。目前我是GitHub Pro Plan的用户,所以我的源码仓库和GitHub Pages仓库都是私有的,那就更得需要这个东西了。
生成ssh-key
1 | ssh-keygen -t rsa -f ~/.ssh/github-actions-deploy -C "github username" |
按两下回车即可生成。其中-C参数是可选的,没有太多的ssh-key可以不加,rsa是加密方式,也可以改成其他的加密方式。
执行完成后会生成如下两个文件:
1 | ~/.ssh/github-actions-deploy #私钥 |
将公钥添加到GitHub Pages Repo
在GitHub Pages Repo中,打开Settings -> Deploy keys -> Add deploy key,将~/.ssh/github-actions-deploy.pub的内容添加进去即可。
将私钥添加到源码仓库
在你托管博客内容的仓库中,假设是hexo-blog,打开Settings -> Secrets -> New secret,这里需要注意Name的值,这个将作为GitHub Action中的变量使用,推荐大写,驼峰或者下划线。我的名称是GH_ACTION_DEPLOY_KEY,另外,为了使用algolia,我还在该仓库新增了HEXO_ALGOLIA_INDEXING_KEY。
添加GitHub Action配置文件
在站点根目录新增文件.github/workflows/deployci.yml配置文件。
1 | mkdir -p .github/workflows |
以下内容是本站的action
1 | name: Deploy Blog |
编写完成后将本次新增的内容提交到GitHub上去,即可完成新增文章,提交到GitHub,完成自动部署,再也不用在本地执行一堆命令,等待半天在执行hexo d去部署了。
GitAction解读
直接丢一个配置好的出来,并不能完全懂里面的意思,虽然搞技术的基本上能看个八九不离十,但是对于很多新手来说,还是差点意思,所以就分段解释下这个配置文件。
1 | name: Deploy Blog |
很简单,就是定义GitHub Action的名字。
1 | on: |
监听master分支的push时间,一旦在该分支发生push即可触发GitHub Action的执行。
1 | jobs: |
定义Job,构建信息,runs-on: ubuntu-latest表示GitHub Action将会以ubuntu系统来运行。
steps代表执行步骤,按照定义的先后顺序来执行一系列的工作流。
1 | - name: Checkout source |
拉取站点源码的步骤,如果不指定分支则从默认分支拉取,path表示将源码pull下来后的位置,不设置就是当前目录,目前我是将其放在master目录,所以后面执行hexo命令,安装依赖等都需要执行cd master。不然会出现错误。
1 | - name: Setup node |
配置node运行环境,版本指定为12.x,也可以是14.x,只要没兼容问题就行。
1 | - name: prepare build env |
准备构建环境,这里主要是为了配置ssh-key,有些人用的不是hexo d来部署的,而是直接通过ftp,特定的客户端等直接将其上传到指定的位置:又拍云、OSS等地方。那就不需要这一步。[email protected]是为了避免邮箱泄露GitHub推出的private mail,老用户都是username@但是2017年7月18日年以后的都是uid+username@
不过我账号14年就创建了,可惜我还是uid+username@的形式,可能是我更换了几次用户名的问题吧。具体请参考setting-your-commit-email-address说明。
1 | - name: Install hexo dependencies |
安装hexo站点依赖,因为我在检出代码的时候设置了代码的位置master,所以这里需要先进入这个目录,再去安装hexo的依赖。
1 | - name: Deploy Blog |
最后一步,当然是将网站内容生成,部署到GitHub Pages中了,同样的如果你没有设置站点路径,则没必要cd site path。之前Hexo 5.0.0执行hexo clean会报错,其实这里也没必要执行这个命令,因为每次都是一个全新的虚拟环境,完全不用clean。当然我还是将Hexo 5.0.0升级到了5.0.2。
另外很多文章都会有一步处理主题的step,我的没有是因为我是通过npm安装的主题,既然高版本支持了这样的方式,那就用起来吧,毕竟用git submodule管理主题也麻烦,每次都要拉取主题,配置版本等,直接npm install hexo-theme-next --save即可安装主题,要更新也只是改下pageage.json中的版本即可,方便又快捷。
GitHub Action定价策略
目前GitHub Action采用免费时长的营销策略:
- 对于普通用户每个月可以免费使用
2000分钟 - 对于Pro用户每个月免费使用
3000分钟
目前我总共有80余篇,执行时间为33秒每次,所以这个额度按照每日提交两次来算,普通用户都绰绰有余。


