目 录CONTENT

文章目录

Github Action 自动部署 Hugo

16Reverie
2025-03-30 / 0 评论 / 0 点赞 / 115 阅读 / 0 字

其实两年前就心血来潮实现过,不过当时没有记录,以致于现在想再次实现又需要查阅资料。知识需要沉淀。

原先实现是通过Github Action + 宝塔面板Webhook 实现:

本地代码提交到 Github 后触发 Github Action,构建 Hugo,将构建代码推送到 pulic 分支。public 通过 webhook 与宝塔面板通信,宝塔面板收到通知后 git pull 拉取 public 分支的代码到网站的目录下。实现自动部署。

本地代码 Push GitHub 仓库 触发 GitHub Actions 构建 Hugo 并 Push public 分支 触发 宝塔面板 Webhook 通知 宝塔面板拉取 网站目录 拉取

现在使用 1panel 并不支持 webhook,但能实现的方法还有很多。例如通过 Github Action SSH 服务器,在服务器中执行拉取代码执行或者文件传输指令;用 Github Action rsync 进行文件同步。直接在 Github Action 中就能完成,流程更加简单了。

这次用的是 rsync 进行实现:

本地代码 Push GitHub 仓库 触发 GitHub Actions 自动构建 Hugo 通过 rsync 同步 网站主机目录

具体实现方法:

Github Workflow 配置:

name: Nav Deploy Hugo

on:
  push:
    branches:
      - main

jobs:
  build-deploy:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          
      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v3
        with:
          hugo-version: '0.145.0'
          extended: true

      - name: Build 
        run: hugo --minify
      
      - name: rsync deployments
        uses: burnett01/rsync-deployments@7.0.2
        with:
          switches: -avzr --delete
          path: public/
          remote_path: ${{ secrets.DEPLOY_PATH }}
          remote_host: ${{ secrets.DEPLOY_HOST }}
          remote_port: ${{ secrets.DEPLOY_PORT }}
          remote_user: ${{ secrets.DEPLOY_USER }}
          remote_key: ${{ secrets.DEPLOY_KEY }}

测试运行结果

第一次同步很慢,7分多钟(总共不到50M文件)

第二次快了很多(仅修改了一个文件的内容)

但是两次都出现报错

rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1338) [sender=3.4.0]

虽然报错,但网站功能正常,应该是不影响功能的错误。

找到错误位置:

rsync: [generator] failed to set times on "***.": Operation not permitted (1)

原因是SSH的用户没有权限去修改目标文件的时间戳,修改时间戳需要目标文件的所属用户和所属组都是操作用户才行。将我的操作目录chown修改后,不再报错。

完成!

其他部署选择

将文件部署到个人服务器上,除了rsync,还有其他选择,例如SCP 、git pull 以及 ftp 等。

不过使用SSH类的选择会触发服务器厂商的高危告警:美国异地登录。

Action

actions/checkout@v4

官方action,用于将代码检出到Action运行环境,待后续操作

  • ref:指定要检出的分支、标签或提交哈希,默认为当前触发工作流的分支。

  • submodules:是否检出子模块,可选值为 truerecursivefalse,默认为 false

  • fetch-depth:指定要获取的提交历史的深度,设置为 0 表示获取所有历史记录,默认为 1

peaceiris/actions-hugo

安装hugo到Action运行环境

  • hugo-version: 指定hugo版本

  • extended :使用hugo扩展版

burnett01/rsync-deployments

用于执行rync同步命令

  • remote_hostremote_userremote_port :目标主机地址、用户名、端口号

  • remote_key:SSH 私钥

  • path:源路径,默认为 GITHUB_WORKSPACE 并且相对于它

  • switches :指定rsync的执行选项

其他

新建 action 变量:

仓库Settings -> Secrets and variables -> Actions

新建 token(未用到):

账户Setttings -> Developer Settings -> Personal access token -> token(classic) -> select repo&workflow

参考

https://docs.github.com/zh/actions/writing-workflows/workflow-syntax-for-github-actions

https://github.com/peaceiris/actions-hugo?tab=readme-ov-file#%EF%B8%8F-create-your-workflow

https://zephyrbd.github.io/p/howtobuildablog/#github-action%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2

0

评论区