使用 GitHub Actions + rsync 实现 Hexo 自动打包部署
Pchen

0. GitHub Actions 简介

GitHub Actions 是 GitHub 提供的 CI/CD(持续集成与持续部署)工具,它使开发者能够自动化工作流程。通过 GitHub Actions,我们可以在每次代码提交时,自动执行测试、构建和部署任务。

对于 Hexo 博客,只需将文章修改并推送到 GitHub 仓库,GitHub Actions 将自动编译生成静态页面,并通过 rsync 部署到服务器上,无需在本地环境安装 Hexo、Node.js 或 Git,还可在Github网站上实现在线编辑,极大提高了工作效率。

1. 创建 GitHub 仓库

首先,创建一个 GitHub 仓库,用于存放 Hexo 项目的源代码。仓库可以设置为私有。

创建 GitHub 仓库

2. 配置 Repository Secrets

进入仓库的 Settings -> Secrets and variables -> Actions,点击 New repository secret 创建新的密钥。
你需要配置以下内容:

  • SSH_PRIVATE_KEY:服务器的 SSH 私钥
  • SERVER_USER:服务器用户名
  • SERVER_HOST:服务器主机地址
  • SERVER_PATH:网站文件存放路径

3. 添加 Actions 配置文件

在你的 Hexo 项目根目录下创建或编辑 /.github/workflows/hexo-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
41
42
43
44
45
46
47
48
49
50
51
52
name: Deploy Hexo to Server

on:
push:
branches:
- main # 触发打包部署的分支

jobs:
deploy:
runs-on: ubuntu-latest

steps:
# 步骤 1:检出代码
- name: Checkout code
uses: actions/checkout@v3

# 步骤 2:设置 Node.js 环境
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '16'

# 步骤 3:安装依赖
- name: Install dependencies
run: npm install

# 步骤 4:构建网站
- name: Build the site
run: npm run build

# 步骤 5:部署到服务器
- name: Deploy to server
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
SERVER_USER: ${{ secrets.SERVER_USER }}
SERVER_HOST: ${{ secrets.SERVER_HOST }}
SERVER_PATH: ${{ secrets.SERVER_PATH }}
run: |
sudo apt-get install -y openssh-client

# 配置 SSH 密钥
mkdir -p ~/.ssh
echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa

# 禁用主机检查(避免首次连接时的提示)
echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config

# 使用 rsync 同步构建文件到服务器
rsync -avz --delete ./public/ $SERVER_USER@$SERVER_HOST:$SERVER_PATH

echo ">_ 部署成功"

4. 自动打包与部署

每当你将更改推送到配置的 main 分支时,GitHub Actions 会自动执行上述配置,完成 Hexo 项目的编译和部署过程。你可以在 GitHub 仓库的 Actions 页面查看执行日志,确保部署成功。

GitHub Actions

通过 GitHub Actions 配合 rsync 自动化部署 Hexo 博客,不仅免去了手动编译和部署的繁琐步骤,还提高了工作效率。每次提交后,博客都能在几分钟内自动更新并部署到服务器。

 Comments
Comment plugin failed to load
Loading comment plugin
本站已支持IPv6