背景
之前一篇文章介绍了hexo与gitbook集成,主题博客还是使用hexo搭建,部分系列文章使用gitbook构建。但是每次书写了新文章都要编译、集成gitbook,然后push到git仓库中,最后去服务器上拉取静态页面代码,生成我们的网站界面。整个操作还是略显麻烦,所以研究了下Github Action将hexo自动部署到我的服务器上。
GitHub Actions
实现代码提交的自动化工作流,要依靠持续集成(或者加上持续交付)服务。现在主流的公用免费的持续集成服务有:
- Travis CI
- Jenkins
- Circle CI
- Azure Pipeline
- GitHub Actions
本文使用GitHub Actions
来完成自动化部署工作。GitHub Actions
是GitHub
自家的持续集成及自动化工作流服务,简单易用。只要在仓库目录下建立github/workflows
文件夹,将我们的工作流配置(YAML)文件放到这个目录下,就能启用GitHub Actions
服务
创建GitHub仓库
在GitHub
上创建blog
仓库在存放我们的Hexo
项目
创建SSH 密钥对连接
要把文件部署到远程服务器,首先要解决登录校验的问题。要么用密码登录、要么用 SSH 密钥登录。这里推荐用第二种方式,因为密码可能要定期更换,而用 SSH 密钥可以一劳永逸。
其实主要是GitHub
偷偷在七夕(2021年8月14日)这天将密码认证给取消了!
1 | remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. |
生成秘钥
首先登录我们的服务器,然后执行
1 | cd ~/.ssh |
默认回车执行,就会在我们的~/.ssh
文件夹下生成两个文件blog
(私钥)和blog.pub
(公钥)。其中私钥是我们的个人登录凭证,公钥则存放到需要登录的服务器上。
存放公钥
将公钥blog.pub
存放到服务器上的~/.ssh/authorized_keys
中:
1 | cd ~/.ssh |
存放私钥
私钥需要存放到我们的github仓库中,这样我们的仓库才能连接到我们的服务器。
具体操作:
打开代码仓库,点击 Settings 标签,找到 Secrets 设定:
选择Add a new secret
,添加一个配置项DEPLOY_KEY
,将私钥的内容粘贴在其中。
可以看到我这里还将服务的ip和用户名,添加到了配置中,方便后续登录使用。
编写工作流文件
可以在github仓库界面上点击Actions
创建新的工作流,这里可以选择很多模板。
或者干脆在本地仓库跟目录下建立github/workflows
文件夹,再创建一个main.yml
文件,文件内容参考如下:
1 | # This is a basic workflow to help you get started with Actions |
流程第一步
下载代码仓库;
流程第二步
使用我自己的脚本,将gitbook集成到hexo中,可以查看hexo与gitbook集成这篇文章。
流程第三步
将代码仓库下的public
仓库推送到我们的服务器中,因为我们需要的静态网站资源也就存放在public
目录下。这里就用上了我们之前创建的秘钥。
流程第四步
因为我的博客网站主要是靠nginx服务映射到服务器的本地目录下,所以这里重启一下nginx服务,强制刷新一下。
将yml
文件提交到仓库中,我们的Actions
就已经启动了!
执行自动化部署
在本地目录执行一次提交,看看我们的Action
执行结果:
成功!