You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github自托管Runner无法获取代码最新版本问题

自托管GitHub Actions Runner构建后代码未更新问题

问题背景

  1. 初始情况:使用自托管Runner执行构建部署Workflow,任务执行成功,但SSH登录服务器进入应用目录后,发现代码比main分支落后一个提交,手动执行git pull可拉取最新提交。
    初始Workflow配置:
name: Build and Deploy
on: push
jobs:
  Deploy-on-local-runner:
    runs-on: self-hosted
    steps:
      - uses: actions/checkout@v3
      - name: run npm ci
        run: npm ci
      - name: npm run build
        run: npm run build
  1. 修改后情况:按照建议修改yml文件并修改test.txt,任务仍执行成功,但服务器磁盘上的文件未更新。SSH登录服务器执行git pull的响应(已翻译):
kevin@machine:~/projects/project$ git pull
远程:正在枚举对象:11,完成。
远程:正在计数对象:100% (11/11),完成。
远程:正在压缩对象:100% (1/1),完成。
远程:总计6个(差异2个),复用6个(差异2个),未复用0个
正在解压对象:100% (6/6),449字节 | 64.00 KiB/s,完成。
来自 github.com:user/repo
   bc759e9..1e4b98e  main       -> origin/main
更新 bc759e9..1e4b98e
快进
 .github/workflows/deploy.yml | 3 +++
 test.txt                     | 2 +-
 2个文件被更改,插入4行(+),删除1行(-)

排查与解决方法

  • 修正actions/checkout拉取策略
    默认actions/checkout@v3采用浅克隆(仅拉取最新1个提交),且不会主动切换到对应分支。修改checkout步骤,拉取完整历史并绑定触发分支:

    - uses: actions/checkout@v3
      with:
        fetch-depth: 0
        ref: ${{ github.ref }}
    
  • 清理Runner工作目录
    自托管Runner会复用工作目录,旧代码残留可能导致新代码无法覆盖。在checkout前添加清理步骤:

    - name: Clean workspace
      run: |
        git clean -ffdx
        git reset --hard HEAD
    
  • 确认构建产物同步路径
    检查npm run build生成的产物目录(通常是dist),确保产物被同步到服务器的应用目录。添加同步步骤:

    - name: Sync build files to deployment directory
      run: rsync -avz --delete ./dist/ ~/projects/project/
    
  • 检查Git分支跟踪设置
    确保本地分支正确跟踪远程分支,在Workflow中添加分支绑定命令:

    - name: Set upstream branch
      run: git branch --set-upstream-to=origin/main main
    

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:15:33