利用 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
,老用户都是[email protected]
但是2017年7月18日年以后
的都是[email protected]
不过我账号14年就创建了,可惜我还是[email protected]
的形式,可能是我更换了几次用户名的问题吧。具体请参考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秒
每次,所以这个额度按照每日提交两次来算,普通用户都绰绰有余。