利用Github Actions实现自动部署
本文参考
Hexo 部署
在Hexo中,以往的部署通常都需要通过命令
1 | hexo clean # 清空静态页面(public文件夹) |
在实现自动部署之前,hexo博客必须能够成功运行以上代码并成功部署
实现自动部署
生成ssh密钥文件
在任何位置的git bash窗口中运行
1 | ssh-keygen -t rsa -b 4096 -C "Hexo Deploy Key" -f github-deploy-key -N "" |
会在当前目录生成两个文件
- github-deploy-key —— 私钥
- github-deploy-key.pub —— 公钥
创建私人仓库(用于部署)
在GitHub中创建repositories,名字随意取,选private,其他勾不勾无所谓
然后在你的博客文件夹根目录(不是themes目录)运行
1 | git init |
将整个博客文件夹变成一个git管理的仓库
依次运行
1 | git add . # 将所有文件夹加入到暂存区(这里需要删除themes中的.git文件夹,否则themes文件夹不会被加入暂存区) |
现在看你的私人仓库,文件内容应该和你的工作区(本地博客文件夹)是一致的(本地的.deploy_git可以直接删除)
配置密钥
配置私钥
- 在上面的创建的私人仓库中访问
Settings -> Secrets,New secret
- 在name中填写
HEXO_DEPLOY_KEY
,将私钥文件github-deploy-key
中的内容全部复制进来
配置公钥
- 在你的博客仓库(存放html静态页面的仓库),一般为
name.github.io
中访问Settings -> Deploy keys,Add deploy key
- 在name中填写
HEXO_DEPLOY_PUB
,将公钥文件github-deploy-key.pub
中的内容全部复制进来 - 勾选
Allow write access
创建触发自动部署的脚本
两种方法
- 直接在私人仓库中添加文件(路径为.github/workflows/deploy.yml),然后再pull到本地;
- 直接在本地工作区添加文件(路径为.github/workflows/deploy.yml),然后再push到仓库;
我这里选用了方法一
在私人仓库添加文件(路径为.github/workflows/deploy.yml),内容为
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
39
40
41name: Hexo Deploy
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-18.04
if: github.event.repository.owner.id == github.event.sender.id
steps:
- name: Checkout source
uses: actions/checkout@v2
with:
ref: master
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: '12'
- name: Setup Hexo
env:
ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_KEY }}
run: |
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
git config --global user.email "email@xx.com"
git config --global user.name "usrname"
npm install hexo-cli -g
npm install
- name: Deploy
run: |
hexo clean
hexo deploy将上面的email和usrname改为你自己的邮件路径和名字
上面的推送脚本就是说只要本地的工作区有内容push到私人仓库中,就会执行hexo clean和hexo deploy然后将这个文件夹pull到本地
1
git pull origin master
如果没有成功把workflow文件夹pull到本地,可以尝试
1
git pull -f origin master # 强制拉取
如果不进行拉取同步,那么在后续push的时候也会报错,因为你私人仓库和本地仓库内容不同步。
测试
知道了原理,你可以在本地中修改任意文件,然后执行
1 | git push origin master |
成功push之后,就是自动触发GitHub Actions中的脚本,执行编译和部署(如果失败的话),GitHub就会给你发邮件。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 xuedue!