使用github action同时部署hexo到github和coding最优雅的方式(支持多github账号)
文章目录
目标
我们知道使用github action 可以很简单的部署hexo的静态文件到github pages,但是如果在国内我们希望部署到github pages同时也部署到coding,然后通过dns双线路由,另外,我们可能有多个账号,比如公司的和个人的博客或者网站,也是同时部署到coding和github,那就这个github action解决不了,下面我们改造一下,使其达到这个目标:
- hexo的source存放在独立库
- 生成的静态文件存在独立的库
- 提交markdown文件后,自动生成静态文件
- 自动部署到github pages
- 自动部署到coding
- 同一份hexo source库,只需要配置一次hexo的
_config.yml
,就可以直接通过hexo deploy -g
或者git push
来触发部署 - 支持多个github账号,同时也支持多个coding账号
配置hexo的deploy
找到hexo根目录的_config.yml,然后配置deploy字段的内容如下
1 | deploy: |
这个配置目标是让我们直接hexo deploy
可以同时推送到 github 和 coding 的 pages 仓库
配置 hexo deploy命令支持多个github和coding账号
一般来说,如果我只有一个github的账号,在这个配置下直接执行hexo g -d
,一个命令就可以直接完成两个仓库的部署了。
那么如果我们的github账号有多个,比如有一个办公用的,一个私人的,那怎么办?
我们知道 git 的 ssh 推送方式是需要使用特定的 key 的, 所以,我们只需要配置 ssh 去路由特定的域名到key即可.
根据需求,在配置这个ssh key的路由之前,我们要先生成一个key用于做pages部署
1 | ssh-keygen noosphere-coder |
然后一路回车就行(不需要太强的安全性的话),生成后key在/home/$USER/.ssh/
目录下
为了这个key可以推送到github或者coding的独立账号,我们需要把这个key加入到github和coding的账号,比如我新建了一个noosphere-coder的github账号,那么我把这个noosphere-coder的ssh key作为这个账户的ssh key即可,打开[https://github.com/settings/keys](https://github.com/settings/keys)
,点击 New SSH key
增加即可,加入后,我们就可以用这个key来操作这个github账号了(coding也类似)。
接下来,我们用这个key来配置ssh key的路由,达到执行git push
命令的时候自动使用不同的key:
1 | cat << EOF > /home/$USER/.ssh/config |
这个配置告诉ssh,如果碰到Host为noosphere-coder.github.com
或者noosphere-coder.coding.net
的时候就去使用/home/$USER/.ssh/noosphere-coder
这个key
但是,由于我们新建的github的仓库,默认的remote url的是git@github.com:noosphere-coder/hexo-noosphere.git
(coding亦如是)
所以我们需要修改这个仓库的remote url为git@noosphere-coder.github.com:noosphere-coder/hexo-action.git
1 | git remote set-url origin git@noosphere-coder.github.com:noosphere-coder/hexo-action.git |
coding项目也如法炮制即可。
截止目前,你用hexo g -d
就可以用不同的账号推送到github和coding了。
配置github CI Actions
上面章节,我们配置了git和hexo,完成了通过一个 hexo g -d
的命令直接推送到github和coding,并支持多个账号。
hexo g
是在本地生成静态文件,我们的source文件的仓库一般是放在github,然后配置为私有仓库,保证安全性,所以,我们接下来配置github CI actions,来达到直接直接用git push
来触发hexo g -d
,也就是,当我们git push
的时候,CI自动生成静态文件,然后自动推送到github和coding的静态pages仓库。
下面我们来看看最终的CI action的配置,然后再来解释
github hexo ci action
1 | # This is a basic workflow to help you get started with Actions |
配置说明:
- 在这个配置里面,我们use了一个action,
[noosphere-coder/hexo-action@master](https://github.com/noosphere-coder/hexo-action)
,这个是我根据目标定制的一个action,来自于[sma11black/hexo-action](https://github.com/sma11black/hexo-action)
- 这里没有使用dependency cache,因为
node-sass
这本地构建的包在cache的情况下存在版本不一致的问题,暂时没找到解决办法
那么,这里我们为什么要定制一个自己的action,原因是smallblack/hexo-action
不支持同时推送到github和coding
因此,我们fork这个action的仓库来改造一下
改造 smallblack/hexo-action
的entrypoint.sh
1 |
|
这个改造也很简单
- 把我们上面生成的
noosphere-coder
的这个ssh key 配置成 变量,然后把它生成为跑action的容器的ssh key/root/.ssh/key
- 把coding的证书加入的known_hosts
- 配置ssh key 路由
看到第一点,我们就知道,我们需要把noosphere-coder的ssh key的秘钥加入到source仓库的secret key,并且命名为 DEPLOY_KEY
:
- 打开你github的source 仓库
- 点击
settings
- 点击
Secrets
- 点击
New secret
然后把本地的/home/$USER/.ssh/noosphere-coder
的内容复制进去即可。
总结
通过以上
折腾
,我们完成了一个比较优雅的hexo部署方式,既可以直接用在本地一条命令hexo g -d
直接部署到github和coding,也可以通过git push
来触发这个同时部署,而且github和coding的静态pages的仓库配置只需要在hexo的_config.yml配置一次就可以了。同时,我们这个方法支持在机器上使用多个github或者coding账号,可以区分同时拥有如办公和私人账号的这类情况
如需要自己搭建hexo服务器,而不是用github和coding,请参考:
个人拥有云服务器能用来干啥好玩的?
阿里云、腾讯云、华为云多角度对比