事出有因
每次更新博客都要hexo cl;hexo g;hexo d,对我这种懒人实在不友好。于是我决定让git-action自动帮我部署。
建立博客源码仓库
在github上新建储存博客源码的仓库,或者直接使用github-pages仓库的分支,我这里选择新建仓库。注意不要把所有文件都传到github,博客根目录新建.gitignore文件,写入如下内容:
1 2 3
| public/ node_modules/ .deploy_git/
|
先不要着急将文件推送到仓库
建立主题仓库
主题文件是hexo构建时必不可少的,比如我用的butterfly主题。
这时候可以简单点儿直接删除butterfly文件夹下的.git文件夹,以下部分都不用做。
博客源码与主题用一个仓库管理可能不利于主题升级
,所以我选择将butterfly主题仓库作为git子仓库管理。
fork butterfly主题仓库
新建一个butterfly仓库,将经过魔改的butterfly仓库推送到其中。
构建butterfly子模块
删除本地butterfly文件夹,输入以下命令:
1
| git submodule add <repo-url> themes/butterfly
|
该命令会将指定的 Git 仓库作为子模块添加到当前仓库中。
repo-url 是你的butterfly仓库地址。
之后在vscode git管理界面是这样的:

这样就成功将butterfly仓库作为博客源码仓库的一个子模块。
配置部署密钥对
在git-action分配的资源上是无权改动我们的github_pages仓库的,所以要
为这个仓库设置部署用密钥
首先在本地生成一个公私钥对
在github_pages仓库的settings界面,找到deploy keys,
新增生成的公钥。这步大家应该很熟练了,记得勾选下面的Allow write access

回到源码仓库,在设置中找到 Secrets and variables -> actions,
新建一个 repository secret,名称是 PAGE_DEPLOY_KEY,底下的Secret填你生成的刚生成的私钥。注意私钥整个文件的内容都要填进去

(可选)配置访问私有butterfly仓库的密钥
如果你的butterfly仓库设置的是公有,直接跳过这步。
如果你像我一样将它设为了私有,那么像上一步一样,为butterfly仓库也
设置一个deploy公钥,并在博客源码仓库添加相应的私钥
为git-action设计工作流
在本地博客根目录下新建.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 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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
| name: mica's Blog CI/CD
on: push: branches: [main, dev] paths: - '_config.butterfly.yml' - '_config.yml' - '**/source/**' - '*.json' workflow_dispatch:
jobs: blog: timeout-minutes: 3 runs-on: ubuntu-latest env: NODE_VERSION: '20' BUTTERFLY_PRIVATE_KEY: ${{ secrets.BUTTERFLY_DEPLOY_KEY }} PAGE_PRIVATE_KEY: ${{ secrets.PAGE_DEPLOY_KEY }} steps: - name: Setup SSH keys for private submodules and GitHub Pages deployment run: | # 创建 SSH 目录 mkdir -p ~/.ssh chmod 700 ~/.ssh if [ -n "$BUTTERFLY_PRIVATE_KEY" ]; then echo "$BUTTERFLY_PRIVATE_KEY" > ~/.ssh/butterfly_deploy_key chmod 600 ~/.ssh/butterfly_deploy_key echo "已配置 butterfly_deploy_key" else echo "警告: BUTTERFLY_PRIVATE_KEY 未设置" fi if [ -n "$PAGE_PRIVATE_KEY" ]; then echo "$PAGE_PRIVATE_KEY" > ~/.ssh/page_deploy_key chmod 600 ~/.ssh/page_deploy_key echo "已配置 page_deploy_key" else echo "警告: PAGE_PRIVATE_KEY 未设置" fi cat >> ~/.ssh/config <<'EOF' Host github.com HostName github.com IdentityFile ~/.ssh/butterfly_deploy_key User git StrictHostKeyChecking no LogLevel ERROR IdentitiesOnly yes
Host github-pages-deploy HostName github.com IdentityFile ~/.ssh/page_deploy_key User git StrictHostKeyChecking no LogLevel ERROR IdentitiesOnly yes EOF chmod 600 ~/.ssh/config ssh-keyscan -H github.com >> ~/.ssh/known_hosts
if [ -n "$BUTTERFLY_PRIVATE_KEY" ]; then echo -e "\n测试 SSH 连接到 GitHub.com:" ssh -T git@github.com || true fi echo "SSH 设置完成" - name: Checkout uses: actions/checkout@v4 with: submodules: false token: ${{ secrets.GITHUB_TOKEN }} - name: Update and fetch submodules run: | # 修改子模块URL为SSH格式 git submodule set-url themes/butterfly git@github.com:mica520/butterfly.git git submodule update --init --recursive --force echo "子模块更新完成" - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: 'npm' - name: Cache dependencies uses: actions/cache@v4 with: path: | ~/.npm node_modules themes/butterfly/node_modules key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json', '**/package.json') }} restore-keys: | ${{ runner.os }}-node- - name: Install dependencies run: | npm install echo "主仓库依赖安装完成" if [ -f "themes/butterfly/package.json" ]; then echo "安装子模块依赖..." cd themes/butterfly npm install cd ../.. echo "子模块依赖安装完成" fi - name: Install Hexo CLI and gulp CLI run: | npm install -g hexo-cli hexo version echo "Hexo CLI 已安装" npm install -g gulp-cli gulp -v echo "gulp CLI 已安装" - name: Generate static files run: | hexo clean hexo generate echo "静态文件生成完成" - name: Compress static files run: | gulp echo "压缩资源完成" - name: Deploy run: | git config --global user.name "github-actions[bot]" git config --global user.email "github-actions[bot]@users.noreply.github.com" hexo deploy echo "部署完成" env: GIT_USER: mica GIT_EMAIL: 2670734380@qq.com - name: Success message run: echo "🎉 部署成功!"
|
注意没有设置子模块的同学要删除相应部分,里面同时设置了gulp压缩资源,没有配置的同学需要删掉。
修改_config.yml文件中的部署地址
由于我们使用了两个密钥,所以要指定部署时使用哪一个,不然git-action部署失败
1 2 3 4 5 6
| deploy: type: git - repository: git@github.com:mica520/mica520.github.io.git + repository: git@github-pages-deploy:mica520/mica520.github.io.git branch: main
|
推送仓库到远程
到此,一切工作都已完成,将本地仓库推送到远程就会
自动触发git-action工作流。
如有错误,还望各位大佬包涵!!