Github自托管Runner无法获取代码最新版本问题
自托管GitHub Actions Runner构建后代码未更新问题
问题背景
- 初始情况:使用自托管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
- 修改后情况:按照建议修改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
相关产品推荐
相关产品推荐

