前言

自动化部署是什么意思?即把HEXO博客的源代码上传到GitHub仓库,当该仓库中的代码发生变动时,自动通过安装一系列环境和依赖,生成HTML文件与GitHub pages仓库。即无需在本地使用指令hexo clean,hexo g,hexo d;这种项目持续集成的方式有很多种,本文选择GitHub action,如选择其他方式可自行百度;

优点:

  • 随时随地增加或者修改博文,我只需登录GitHub存放源代码的仓库,在里面新建博客,编写播客即可,无需由于电脑上没有安装node.js,git等环境而发愁;
  • 如果万一本地文件丢失,我也可以通过博客源代码仓库,git clone一份到本地

创建HEXO源代码仓库

在GitHub上新建一个仓库,仓库名任意,类型选择private,防止上篇文章中获取的GitHub令牌暴露;

本地仓库添加远程库

在根目录下即BLOG文件夹下,右键打开Git Bash Here,输入以下指令:

1
2
3
4
5
6
7
8
git init
git config --global user.name 你的用户名
git config --global user.email 你的邮箱
git add .
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/用户名/新建的私有仓库名.git(私有仓库的地址)
git push -u origin main

将私有仓库地址换成上文创建的HEXO源代码仓库地址即可,在提交的过程中,会要求输入GitHub用户名与密码,输入即可。上述步骤完成后,刷新私有仓库,即可看见本地仓库的一些文件被上传至私有仓库,并不是全部文件都上传,在根目录下有一个.gitignore文件,里面防止了无需上传到私有仓库的文件,保持该文件默认即可,无需修改

配置GitHub Action实现自动化部署

新建workflow

在新建的HEXO源代码私有仓库中,点击Action按钮,在提示的一行信息中有这样一行字set up a workflow yourself,点击这行文字;

配置Action

将自动生成的main.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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
name: Deploy # 部署

on: # 触发条件
push:
branches:
- main # 推送到 main 分支(这里的分支名很重要,不要弄错了)

release:
types:
- published # 推送新版本号

workflow_dispatch: # 手动触发

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout # Checkout 仓库
uses: actions/checkout@v2
with:
ref: main

- name: Setup Node # 安装 Node.js
uses: actions/setup-node@v1
with:
node-version: "12.x"

- name: Install Hexo # 安装 Hexo
run: |
npm install hexo-cli -g
- name: Cache Modules # 缓存 Node 插件
uses: actions/cache@v1
id: cache-modules
with:
path: node_modules
key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}

- name: Install Dependencies # 如果没有缓存或 插件有更新,则安装插件
if: steps.cache-modules.outputs.cache-hit != 'true'
run: | # **如果仓库里没有 package-lock.json,上传一下,npm ci 必须要有 package-lock.json**
npm ci
- name: Generate # 生成
run: |
hexo clean
hexo generate
- name: Deploy # 部署
run: |
git config --global user.name "MYAN1998"
git config --global user.email "1455316479@qq.com"
git clone https://github.com/MYAN1998/MYAN1998.github.io.git
export TZ='Asia/Shanghai'
hexo deploy
- name: 部署至服务器
uses: easingthemes/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.ACCESS_TOKEN }}
ARGS: "-avz --delete"
SOURCE: "public/"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: ${{ secrets.TARGET }}
  • 部署至GitHub-page

    在git clone处换成自己在上篇文章中,新建的仓库(用户名.github.io)这个仓库的地址

    git config —global user.name “GitHub用户名”与git config —global user.email “GitHub邮箱”,也替换成自己的

  • 部署至服务器

    在保存源码的仓库,settings-Secrets-Actions中New repository secret添加四个字段与对应的值;首先是字段ACCESS_TOKEN,值为:首先去你服务器的~/.ssh目录,此时目录下应该有4个文件,分别是authorized_keysid_rsaid_rsa.pubknown_hosts。如果没有id_rsaid_rsa.pub的,可以使用ssh-keygen来生成,这两个文件就是安装Git时需要生成的私钥和公钥。这个时候你看看authorized_keys里面有没有内容,如果有内容说明你之前设置过,ACCESS_TOKEN的值就是authorized_keys所对应的私钥。如果没有内容的话,你可以直接设置为公钥id_rsa.pub的内容,如执行命令cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys,此时就会把id_rsa.pub的内容写入authorized_keys中,然后把ACCESS_TOKEN的值设置为私钥id_rsa中的内容;

    其次是设置字段REMOTE_HOST,REMOTE_USER,TARGET,值分别是服务器IP地址,用户名(我这里直接使用的root),目标路径(我这里是/www/wwwroot/blog.zhouenpei0523.top)

    部署至服务器报错,使用命令查看要同步的文件或文件夹的所属,使用chown命令修改所属用户以及所属组,修改同步的文件夹权限

    1
    2
    chown root:root blog.zhouenpei0523.top/
    sudo chmod -R 777 blog.zhouenpei0523.top/

设置完成后,点击右上角的start commit

查看状态

点击Action按钮,即可查看部署状态,成功后,打开用户名.github.io这个网址即可发现网站部署成功

HOW TO USE

日后如何使用,打开根目录即BLOG目录,右键Git Bash Here,输入如下指令即可:

1
2
3
git add .
git commit -m "添加文章"
git push