记一次Github Actions自动化部署实践

记一次Github Actions自动化部署实践

十月 05, 2020

写在前面的话,事情应该发生在去年我换电脑的时候,因为博客使用hexo搭建的,所以源代码也就都遗留在了本地,每次发布的时候只提交generator之后剩余的静态资源文件。

但是换完电脑忘记拷贝源代码了,所以给自己埋的坑就是原来写的博客源文件全部遗失。不过没关系,正好我有重头开始的准备。

这不,Github Action出现了,从根本上解决了我的痛点。

认知储备

什么是Github Actions

alt

直接点击传送门,看看阮一峰大佬的Github Actions 入门教程;

git公钥、私钥的理解

git的公钥与私钥好比钥匙与锁的关系,一个公钥对应一个私钥。

如何生成?

1
$ ssh-keygen -t rsa -C 'your email'

会有两个文件,一个文件是xxx.pub是公钥,xxx是私钥与之对应。

具体解释,参见 服务器上的 Git - 生成 SSH 公钥

怎么理解Hexo博客自动部署?

简单来讲就是借助Github Actions所提供的虚拟机环境,读取博客源仓库所携带的私钥,写入虚拟机环境的~/.ssh/id_rsa,保证正常push可以有权限进行。而对应的公钥则是保留在目标仓库里面。

其实核心操作还是Hexo提供的deploy commond;

当执行 hexo deploy 时,Hexo 会将 public 目录中的文件和目录推送至 _config.yml 中指定的远端仓库和分支中,并且完全覆盖该分支下的已有内容。

参见hexo官方文档-部署

开始部署

文章假设你已经准备好了两个仓库blog(应该设置为私有仓库,毕竟一些隐私密码都会存在这里)andxxx.github.io。前者用于存放hexo博客源代码,后者用于自动部署的仓库。

绑定公钥与私钥,公钥—–>xxx.github.io私钥—–>blog

下图应该详细阐述了怎么绑定公钥与私钥~

编写Github Actions workflow file

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
name: Deploy Blog

on: [push] # 当有新push时运行

jobs:
build-and-deploy: # 创建job

runs-on: ubuntu-latest # 在最新版的Ubuntu系统下运行

steps:
- name: Checkout # 将仓库内master分支的内容下载到工作目录
uses: actions/checkout@v1 # 脚本来自 https://github.com/actions/checkout

- name: Use Node.js 10.x # 配置Node环境
uses: actions/setup-node@v1 # 配置脚本来自 https://github.com/actions/setup-node
with:
node-version: "10.x"

- name: Setup Hexo Env
env:
ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_KEY }} # 拿到仓库配置的私钥:HEXO_DEPLOY_KEY
run: |
# set up private key for push code
mkdir -p ~/.ssh/
echo "$ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa # 配置秘钥
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
# set git config
git config --global user.name "your name"
git config --global user.email "your email"
# install dependencies
npm i -g hexo-cli # 安装hexo
npm i
- name: Hexo Deploy
run: |
# deploy and automatic push code
hexo generate && hexo deploy # 执行部署程序

温馨提示: 别懵了啊,这个文件是在blog仓库下建立的。

alt

The End

最后,来看看我们的成果吧~

alt

alt

有没有视觉疲劳呢?来放松一下吧~

alt