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

EC2服务器GitHub Actions CI/CD代码不更新问题排查

问题描述

我在EC2服务器上配置了GitHub Actions实现CI/CD流程,多数功能正常,但修改现有接口或代码后,服务器端未同步更新。提交记录显示绿色对勾,代码已推送至服务器,但更改不生效;手动执行pm2 restart index.js后恢复正常,新增路由则能正常同步。怀疑Workflow文件存在问题,但无法定位原因。

当前Workflow配置:

name:  Ci/Cd Pipeline 

on:
  push:
    branches: [ "staging" ]
  pull_request:
    branches: [ "staging" ] 

jobs:
  build:

    runs-on: self-hosted
    
    strategy:
      matrix: 
        node-version: [18.x]
        
    steps:
    - name: cleanup #https://github.com/actions/checkout/issues/21
      run: |
        sudo chown -R $USER:$USER $GITHUB_WORKSPACE
    - uses: actions/checkout@v3
    - run: sudo npm i 
    - run: sudo pm2 kill -a
    - run: sudo pm2 start index.js
问题分析与解决

核心原因

修改旧代码不生效的本质是工作目录的旧代码缓存未被彻底清理,pm2启动时读取的还是残留的旧文件。新增路由能生效是因为新文件不存在缓存,而修改旧文件时,拉取代码的步骤没做到完全覆盖旧内容,导致pm2加载的不是最新版本。

修复方案

  1. 强制拉取最新代码,清理缓存
    给actions/checkout添加参数,确保拉取完整仓库并清空工作目录的未追踪文件:

    - uses: actions/checkout@v3
      with:
        fetch-depth: 0  # 拉取完整提交历史,避免浅克隆导致的代码不一致
        clean: true     # 清理工作目录,删除所有不在版本控制中的文件
    
  2. 移除sudo,避免权限混乱
    使用sudo执行npm和pm2会改变文件所有者,可能导致pm2无法读取更新后的文件。直接用当前用户执行命令:

    - run: npm i 
    - run: pm2 restart index.js || pm2 start index.js
    

    若必须使用sudo,需确保pm2启动时的用户能正常访问工作目录的文件。

  3. 验证代码是否拉取成功
    在拉取代码后添加步骤打印当前提交哈希,与GitHub上的提交哈希对比,确认代码为最新版本:

    - run: git rev-parse HEAD
    

    若哈希不一致,说明runner未拉取到最新代码,需检查runner的网络连接或权限设置。

  4. 用pm2 restart替代kill+start
    直接kill所有pm2进程再启动易引发问题,改用restart命令会重新加载代码;若进程不存在则自动启动:

    - run: pm2 restart index.js || pm2 start index.js
    

修复后的完整Workflow示例

name: Ci/Cd Pipeline 

on:
  push:
    branches: [ "staging" ]
  pull_request:
    branches: [ "staging" ] 

jobs:
  build:
    runs-on: self-hosted
    strategy:
      matrix: 
        node-version: [18.x]
        
    steps:
    - name: 修复工作目录权限
      run: |
        chown -R $USER:$USER $GITHUB_WORKSPACE
    - name: 拉取最新代码
      uses: actions/checkout@v3
      with:
        fetch-depth: 0
        clean: true
    - name: 安装依赖
      run: npm i 
    - name: 重启PM2服务
      run: pm2 restart index.js || pm2 start index.js

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 08:47:22