Skip to content

GitHub Action自动部署博客

1440字约5分钟

HexoGitHub Action

2024-3-2

更新

因为Gitee Pages停止服务,所以本文删掉了Gitee Pages的部署步骤

参考

在此之前,默认你可以正常上传和下载仓库的文件

部署前准备

  1. TOKEN_GITHUB :GitHub的 token (私人令牌的密钥只会显示一次,如果忘了,那只能重新创建了)

    打开GitHub Token的方法:点击自己的Github头像 --> Settings --> Developer settings --> Personal access tokens --> Tokens(classic) --> Generate new token --> Generate new token(classic)

    Note 那里是自己Token的名字,名字可以随便取

    Expiration 是自己令牌的有效期,选择 No expiration 永不过期

    下面的 Select scopes 那里选择 repo以及其子项,然后在选择 workflow

    一切完成之后点击最下面的 Generate token 即可生成自己的 GitHub Token,记住GitHub Token只会显示一次,请务必要记住,否则自能重新生成

  2. GIT_NAME :自己Git名称 ,在设置SSH密钥时使用的Git名称

  3. GIT_EMAIL :自己的Git邮箱,在设置SSH密钥时使用的Git邮箱

❗❗❗

以上的这些信息要部署到自己的GitHub Action仓库中,所以建议将这些信息存放在txt文本中,方便整理添加

❗❗❗

  1. 创建两个GitHub仓库

    Action仓库:用来执行 GitHub Action (推荐私有,这样安全一点)

    Pages仓库:用来存放部署好的静态文件(设置公开,否则无法使用GitHub Pages)

  2. GitHub Action权限设置:打开刚刚创建的仓库,打开 Settings --> Actions --> General ,找到 Workflow permissions 选项,选择 Read and write permissions ,以及 Allow GitHub Actions to create and approve pull requests ,然后在点击下面的Save按钮

  3. 设置秘密文件:将上面准备的 TOKEN_GITHUBTOKEN_GITEEGIT_NAMEGIT_EMAILGITEE_PASSWORD 添加到GitHub Action仓库中

    添加方法在Settings --> Secrets and variables --> Actions 中,找到 Repository secrets 选项,点击 New repository secret 添加

    名字就为上面对应的五个名字 TOKEN_GITHUBTOKEN_GITEEGIT_NAMEGIT_EMAILGITEE_PASSWORD


编写GitHub Action脚本

创建文件夹 .github,然后在 .github 里面创建文件夹 workflows ,在 workflows 中创建文件 xxx.ymlyml 文件的名字可以随便取,然后编写 yml 文件

注意yml语句要对齐

name: Deploy GitHub Pages

# 触发条件:在 push 到 master 分支后
on:
  push:
    branches: [main, master]
  workflow_dispatch:

# 任务
jobs:
  build:
    # 服务器环境:最新版 Ubuntu
    runs-on: ubuntu-latest
    steps:
      # 生成hexo文件
      - name: 检查分支
        uses: actions/checkout@v2
        with:
          ref: main

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

      - name: 安装 Hexo
        run: |
          export TZ='Asia/Shanghai'
          npm install hexo-cli -g
        
        # 因为部署hexo博客需要下载hexo框架
        # 这一步骤就是缓存下载好的hexo框架,下次在部署博客就不需要在重新下载hexo框架了
      - 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: |
          #如果你设置的有glup,则启用下面这行代码
          #npm install gulp-cli -g 
          npm install --save

      - name: 生成静态文件
        run: |
          hexo clean
          hexo generate
          #如果你设置的有glup,则启用下面这行代码
          #gulp
      
      
      # 也可以使用别人写好的更新插件,比如JamesIves/github-pages-deploy-action@v4
      # 但是该插件有时候会出现上传不成功的问题
      # 所以通过git更新要稳定一点
      - name: 部署到GitHub
        run: |
          cd public
          git init
          git config --global user.name '${{ secrets.GIT_NAME }}'
          git config --global user.email '${{ secrets.GIT_EMAIL }}'
          git add .
          git commit -m "${{ github.event.head_commit.message }} Updated By Github Actions"
          git remote add origin https://github用户名:${{ secrets.TOKEN_GITHUB }}@github.com/github用户名/Pages仓库名.git
          git branch -m main
          git push -f origin main

❗❗❗

如果你不知道gulp插件的用法,建议去看看这篇博客使用gulp压缩博客静态资源 | Akilarの糖果屋

如果你觉得麻烦,可以不下载gulp插件,删掉关于 gulp 的语句即可

如果你的根目录中没有gulp的执行文件(也就是 gulpfile.js ),那么GitHub Action运行gulp时则会报错,这点须知(我已经把关于gulp的代码注释掉了,自己按需启用

❗❗❗


注意 ❗❗❗

GitHub Pages如果之前没有部署过,则需要自己手动部署一次,记得要在设置里面启动GitHub Pages


部署GitHub Action

❗❗❗将博客根目录下的 .git文件夹和 themes/自己的主题文件夹 下的 .git 文件夹删掉❗❗❗

将自己的 .github 文件夹放在自己博客的根目录下,在使用git将所有文件及文件夹上传到仓库1中,GitHub检测到 .github 会自动执行里面的脚本

Git上传代码:

git init

git add *

git commit -m "github action"

# GitHub地址改为上面创建的仓库1地址
git remote add origin git@github.com:xxx.git

git branch -M main

git push -f origin main

打开仓库1,点击 Actions 查看 GitHub Action 的运行情况

GitHub Action运行完成之后会显示一个绿色的 ✅ ,则表示运行成功

如果是红色的❌,则表示部署失败,则点击进去查看报错情况,然后根据报错情况自己百度,我上面推荐的那些博客说的也比较细致,推荐去看看,主要是第一篇和第二篇,或许能解决你的问题