什么是Github Action
Github Actions
是Github
推出的一个新的功能,可以为我们的项目自动化地构建工作流,例如代码检查,自动化打包,测试,发布版本等等。入口在项目pull request
的旁边。
一次无意中查看到阮一峰大神博客中提到的Github Action,平常一般玩过的是Jenkins。看到可以将React项目自动部署到Github Page时,灵感就想到了自己的基于Hexo搭建的博客来实现一下自动部署。查了一下资料,的确可以实现的。
该文章不涉及Github Action以及Hexo的教学。请自行查阅
部署前准备
先准备两个仓库,一个是部署博客所产出静态页面(github page)的仓库,一个是博客所有源文件的仓库
在本地生成一个 key:
1 | $ ssh-keygen -t rsa -b 4096 -C "your email" -f ~/.ssh/github-actions-deploy |
(也可以生成其他种类的 key,如果用上面的命令,需要修改一下用户名) 回车完成即可
查看私钥和公钥
1 | $ cd ~/.ssh |
在博客所有源文件的仓库Settings -> Secrets 里添加刚刚生成的私钥,名称为 ACTION_DEPLOY_KEY
。
然后在 Github Pages 的仓库,Settings -> Deploy keys 添加刚刚生成的公钥,名称随意,但要勾选 Allow write access。
添加Github Action
可以在网页上 Actions 里编辑配置文件,也可以直接在源文件的仓库的本地目录添加直接 commit。
本文直接在源文件的仓库的本地目录提交配置文件,将配置文件存至原文件仓库目录下的 .github/workflows/*随便起名*.yml
。
脚本配置如下:
1 | name: Deploy |
对这个配置文件做几点说明:
- Actions 在早期测试时用的是 HCL 格式,而现在使用 YAML 配置,HCL 格式配置文件已被废弃。YAML 格式需要严格按照缩进。
on
标注什么事件会触发这个 workflow,可以指定 branches,详情参考文档。runs-on
设置运行平台,目前有 Windows、Ubuntu、macOS,见文档。uses
是使用打包好的 action,可以通过with
传参数。官方提供了一些 Git 基本操作和环境安装的包,也可以使用 Docker。env
可以设置这一步的环境变量,这一步设置的变量不会继承到下一步。刚才设置的私钥可以通过$
获取到,具体见文档。另外直接将密钥 echo 出来会被打码 :)- 在网页上保存私钥很可能会把 key 存成 CR-LF 换行模式的,而私钥文件要求 LF 模式,要用
tr -d '\r'
去掉回车符。 - Git 配置请更改为自己的。
- 由于我的博客源仓库配置了Submodule,如果没有配置的请直接删除step name为clone的步骤
自动构建
每当你写完博客是直接提交到源仓库即可自动触发构建。会配合Action自动发布到Github Page仓库。
注意事项
如果博客中配置了主题,请注释掉主题下的.gitignore的一些配置,例如本人使用的Next主题
以及配合主题安装的第三方插件,有一些插件通过Git clone安装时不会上传到源文件仓库,需要手动删除掉插件目录下的.git文件夹。
参考资料
http://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html