在日常写博客的过程中我常常使用CI部署,一开始我是使用Jenkins,后来觉得很丑且经常拉库失败(设置的cron是半小时拉取一次,然而常常4-5小时才能更新)

就转向了阿里的工作流,好看很多且界面操作也简单了许多,缺点就是个人使用实在是没必要,企业的话用起来还是很爽的。

再后来看到店长的文章以后就开始使用Github Action,具体可以去看这篇文章

Github Action 优点

  1. 可以多域名多站点部署
  2. 不会出现从服务器去连接github连接不上的情况
  3. 可以一键多处全部部署完成✅
  4. 不再需要使用繁杂的前置命令

    hexo clean
    hexo bangumi -u #bilibili番剧更新
    hexo generate
    hexo algolia
    gulp

比如我自己是在vercel, netlify, 服务器多吉云加速,三处部署。

大大提高可用性与速度。

工作流

在这里分享一下我的工作流,平时写完文章以后,配合vscode左侧的叉子,填写提交信息后,点击提交,立即就可以提交至源码仓库

通过源码仓库的github action推送至服务器与github page的仓库,vercelnetlify会自行拉取github page的仓库的更新,进而实现所有线路更新。

并且使用了店长分享的全站提交至npm,并排除提交html文件大大减小npm包体积大小,具体可以去看这篇文章npm图床使用

这使我可以随时使用静态资源文件(如js,css,img等),我只需修改package.json的版本即可实现资源更新,而丰富的npm镜像又让我的站点速度大大提升,极大的便利性使我得到了极其舒适的体验。

以下是该工作流部分代码,注意该工作流已解决使用CI更新时,hexo更新时间不一致的问题。

autodeploy.yml

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

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 检查分支
        uses: actions/checkout@v2
        with:
          ref: master
          fetch-depth: 0
      - name: Sync local file timestamps
        run: |
          git ls-files -z | while read -d '' path; do touch -d $(git log -1 --format="@%ct" "$path") "$path"; done

      - 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
          hexo algolia
          gulp

      - name: Deploy to Server
        uses: easingthemes/ssh-deploy@v2
        env:
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
          ARGS: "-rltgoDzvO --delete"
          EXCLUDE: ".well-known"
          SOURCE: "./public/*"
          REMOTE_HOST: ${{ secrets.SERVER_IP }}
          REMOTE_PORT: ${{ secrets.REMOTE_PORT }}
          REMOTE_USER: "你的用户名"
          TARGET: "你的服务器绝对路径"
          
      - name: 推送百度必应url
        run: |
          hexo deploy

      - name: 部署到Github
        run: |
          cd ./public
          git init
          git config --global user.name "anzhiyu-c"
          git config --global user.email "userEmail@gmail.com"
          git add .
          git commit -m '${{ github.event.head_commit.message }}'
          git push --force --all https://xxxxxxToken@github.com/anzhiyu-c/anzhiyu-c.github.io

npmignore.js

hexo.extend.generator.register("npmignore", function (locals) {
  // Object
  return {
    path: "/.npmignore",
    data: `**/*.html
.github/
download/
ads.txt
CNAME
robots.txt
`,
  };
});

npmpublish.js

/*
 * @Description: npm
 * @Author: 安知鱼
 * @Email: 2268025923@qq.com
 * @Date: 2022-02-22 12:13:18
 * @LastEditTime: 2022-08-27 12:29:41
 * @LastEditors: 安知鱼
 */
hexo.extend.generator.register('npmpush', function (locals) {
  // Object
  return {
    path: '/.github/workflows/autopublish.yml',
    data:
      `name: Node.js Package
# 监测分支,2020年10月后github新建仓库默认分支改为main,记得更改
on:
  push:
    branches:
      - master

jobs:
  publish-npm:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v1
        with:
          node-version: "12.x"
          registry-url: https://registry.npmjs.org/
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ` + '${{secrets.npm_token}}',
  }
})