【hexo系列】03.Github Action自动部署hexo

前情提要

【hexo系列】01.hexo环境搭建及github.io搭建 - ningan123
【hexo系列】02.hexo和obsidian实现笔记丝滑 - ningan123

问题

1.在上述实现的基础上,每次在本地更新完笔记之后,需要手动执行hexo clean && hexo g && hexo d推送到github.io网站(Github Pages)。
2.推送过去之后访问ningan123.github.io的时候,并不能马上看到更新的内容。

Github Actions介绍

GitHub Actions 是 GitHub 推出的一项强大的自动化工具,它允许用户在 GitHub 仓库中创建、编辑和运行自动化脚本,这些脚本被称为工作流程(workflows)。这些工作流程可以响应 GitHub 上的各种事件,例如代码被推送、issue 被创建、pull request 被打开或定期调度任务等。

GitHub Actions 的工作流程(workflow)由 YAML 文件定义,这些文件放在仓库的 .github/workflows 目录下。每个工作流程文件描述了一系列的作业(jobs)和步骤(steps),定义了运行环境、触发条件、要执行的任务等。

背景

本地存在一个存放hexo博客的文件夹
github.io已经搭建

步骤

1. 新建私有仓库(自动化仓库)

先建一个私有仓库(blog),这个仓库存放的是编译前的文件,也就是你电脑本地的文件,这个仓库是拿来做自动化的

image.png

目前github上一共两个仓库

  • 一个公有仓库存编译好的hexo(pages仓库,仓库名是ningan123.github.io
  • 一个私有仓库存本地电脑编译前的文件(自动化仓库,仓库名是blog

2.绑定本地文件夹到github的私有仓库blog

先查看本地的文件夹是否已经被git管理

方法1:

1
2
3
PS E:\SynologyDrive\blog> git remote -v
fatal: not a git repository (or any of the parent directories): .git
PS E:\SynologyDrive\blog>

方法2:
查看文件夹根目录下是否有.git文件夹,如果有,需要删除

文件夹根目录下添加.gitignore文件

1
2
3
4
5
6
7
8
9
10
11
12
13
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/
.deploy_git*/
.idea
themes/butterfly/.git
themes/3-hexo/.git
themes/landscape/.git
themes/fluid/.git

如果你的主题不是butterfly,那么最后一行请改为你使用的主题
我把我涉及到的几个主题都写上了

绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
git init  #把这个目录变成Git可以管理的仓库

# 可选 begin
# 设置本仓库的用户名和邮箱
git config user.name ningan123
git config user.email xxx
# 可选 end

git add . #添加当前目录文件到缓存区(别漏命令后面的点)
git commit -m "first commit" #提交缓存区内容到本地库,并备注first commit

#下面两条命令二选一,就行了
git remote add origin https://github.com/用户名/自动化仓库名.git #利用https关联远程仓库
git remote add origin git@github.com:用户名/自动化仓库名.git #利用ssh关联远程仓库

git remote add origin git@github.com:ningan123/blog.git

git push -u origin master #把本地库的所有内容推送到远程库上
git branch --set-upstream-to=origin/master master
git pull # 如果报错,fatal: refusing to merge unrelated histories,执行:git pull --allow-unrelated-histories

3.获取 Github token

Personal Access Tokens (Classic)

image.png

image.png

生成的token保存好,只会出现这一次,我之前已经生成过了,就不生成了

4.设置私有仓库的secret

image.png

image.png

5.设置workflow

在本地博客文件夹.github/workflows/下新建autodeploy.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
63
64
65
name: 自动部署

# 当有改动推送到master分支时,启动Action
on:
push:
branches:
- master #2020年10月后github新建仓库默认分支改为main,注意更改
release:
types:
- published

jobs:
deploy:
runs-on: ubuntu-latest # 任务所需容器,可选值:ubuntu-latest、windows-latest、macos-latest
steps:
- name: 检查分支
uses: actions/checkout@v2
with:
ref: master

- name: 安装 Node
uses: actions/setup-node@v1
with:
node-version: "16.x"

- name: 安装 Hexo
run: |
export TZ='Asia/Shanghai'
npm install hexo-cli -g

- name: 缓存 Hexo
id: cache-npm
uses: actions/cache@v3
env:
cache-name: cache-node-modules
with:
path: node_modules
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-

- name: 安装依赖
if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }}
run: |
npm install gulp-cli -g #全局安装gulp
npm install --save

- name: 生成静态文件
run: |
hexo clean
hexo bangumi -u #bilibili番剧更新
hexo generate


- name: 部署到Github
uses: JamesIves/github-pages-deploy-action@v4
with:
token: ${{ secrets.GITHUBTOKEN }}
repository-name: ningan123/ningan123.github.io
branch: main
folder: public
commit-message: "${{ github.event.head_commit.message }} $(date +\"%Z %Y-%m-%d %A %H:%M:%S\") Updated By Github Actions"

1
2
3
git add .\.github\workflows\autodeply.yaml
git commit -m "add autodeply"
git push

image.png

重新生成了token也不好使,后来换了一个autodeploy.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
name: 自动部署

# 当有改动推送到master分支时,启动Action
on:
push:
branches:
- master #2020年10月后github新建仓库默认分支改为main,注意更改
release:
types:
- published

jobs:
deploy:
runs-on: ubuntu-latest # 任务所需容器,可选值:ubuntu-latest、windows-latest、macos-latest
steps:
- name: 检查分支
uses: actions/checkout@v2
with:
ref: master

- name: 安装 Node
uses: actions/setup-node@v1
with:
node-version: "16.x"

- name: 安装 Hexo
run: |
export TZ='Asia/Shanghai'
npm install hexo-cli -g

- name: 缓存 Hexo
id: cache-npm
uses: actions/cache@v3
env:
cache-name: cache-node-modules
with:
path: node_modules
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-

- name: 安装依赖
if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }}
run: |
npm install gulp-cli -g #全局安装gulp
npm install --save

- name: 生成静态文件
run: |
hexo clean
hexo bangumi -u #bilibili番剧更新
hexo generate


# - name: 部署到Github
# uses: JamesIves/github-pages-deploy-action@v4
# with:
# token: ${{ secrets.GITHUBTOKEN }}
# repository-name: ningan123/ningan123.github.io
# branch: main
# folder: public
# commit-message: "${{ github.event.head_commit.message }} $(date +\"%Z %Y-%m-%d %A %H:%M:%S\") Updated By Github Actions"


# - name: Build and Deploy
# # 使用专门部署 Hexo 到 GitHub pages 的 action
# uses: Tit1e/hexo-deploy-github-pages-action@master
# env:
# PERSONAL_TOKEN: ${{ secrets.GITHUBTOKEN }} # secret 名
# PUBLISH_REPOSITORY: ningan123/ningan123.github.io # 公共仓库,格式:GitHub 用户名/仓库名
# BRANCH: main # 分支,根据实际填写
# PUBLISH_DIR: ./public # 部署 public 目录下的文件,hexo 一般都是这个目录,可根据实际调整

- name: deploy #此处master:main 指从本地的master分支提交到远程仓库的main分支(不是博客的分支写master即可),若远程仓库没有对应分支则新建一个。如有其他需要,可以根据自己的需求更改。
run: |
export TZ='Asia/Shanghai'
cd ./public
git init
git config --global user.name '${{ secrets.GITHUBUSERNAME }}'
git config --global user.email '${{ secrets.GITHUBEMAIL }}'
git add .
git commit -m "${{ github.event.head_commit.message }} $(date +"%Z %Y-%m-%d %A %H:%M:%S") Updated By Github Actions"
git push --force --quiet "https://${{ secrets.GITHUBUSERNAME }}:${{ secrets.GITHUBTOKEN }}@github.com/${{ secrets.GITHUBUSERNAME }}/${{ secrets.GITHUBUSERNAME }}.github.io.git" master:main # GitHub配置

image.png

github.io里面也即时推送过来la~

image.png

参考

Github Action自动化部署Hexo博客和Qexo管理后台 - 清~幽殇

♪(^∇^*)欢迎肥来!使用 Github Action 自动部署 | 安知鱼


【hexo系列】03.Github Action自动部署hexo
http://example.com/2024/11/01/hexo/【hexo系列】03.Github Action自动部署hexo/
作者
ningan123
发布于
2024年11月1日
许可协议