Skip to content

使用github workflow自动更新博客

目录


原来更新博客的步骤

  1. 格式化检查、生成信息页面
  2. 打包
  3. 移动图片到打包目录
  4. rsync 复制到服务器

workflow 文件解析

yml
name: Deploy Blog
run-name: ${{ github.actor }} updated the blog
on:
  push:
    paths:
      # 仅当docs中的文件更新时才会触发构建
      - "docs/**"
jobs:
  update-blog:
    # 使用基于Ubuntu的虚拟机
    runs-on: ubuntu-latest
    steps:
      # 获取代码
      - name: Checkout repository
        uses: actions/checkout@v3

      # 设置SSH免密登陆
      - name: Setup SSH
        env:
          BLOGUPDATER_SSH: ${{ secrets.BLOGUPDATER_SSH }}
        run: |
          mkdir -p ~/.ssh
          echo "$BLOGUPDATER_SSH" > ~/.ssh/id_ed25519
          chmod 600 ~/.ssh/id_ed25519
          ssh-keyscan -H truraly.fun >> ~/.ssh/known_hosts
          ssh user@truraly.fun "neofetch"

      # 构建项目
      - name: Build project
        uses: actions/setup-node@v4
        with:
          node-version: "22.x"
      - run: |
          npm i pnpm -g
          pnpm install
          node ./js/tags.js        # 添加tag页
          node ./js/addTimeLine.js # 添加时间线
          node ./js/count.js       # 统计知识库情况
          npm run build # 打包
          cp docs/openjsf.png dist/
          cp docs/logo.png dist/

      # 上传到服务器
      # 请确保/wwww/blogs/目录已经存在并且blogupdater用户有写权限
      - name: Deploy with rsync
        run: |
          ssh user@truraly.fun "ls -dal /www/blogs/"
          rsync -avzh --delete  -partial  --bwlimit=1024 ./dist user@truraly.fun:/www/blogs/

github 提供一个临时的虚拟机用来运行脚本,run 后面可以用 shell 命令

参考资料:

Copyright © 2022 田园幻想乡 浙ICP备2021038778号-1