Github CI/CD部署时保留AWS EC2中src/uploads文件的方案求助
解决Github Runner部署时src/uploads文件被删除的问题
问题根源
你配置的paths-ignore作用是:只有当push的文件全在src/uploads/**路径下时,才会跳过Workflow触发。如果同时修改了其他代码,Workflow依然会触发,而actions/checkout@v2步骤会将EC2 Runner工作目录(/reponame/_work/_work/reponame)的内容完全替换为Git仓库的最新代码——由于src/uploads目录通常不会被提交到Git仓库,所以原有上传的文件会被清空。
具体解决方案
方案1:备份并恢复EC2上的uploads目录(快速临时解决)
在actions/checkout步骤前后添加备份恢复逻辑,保留EC2上已有的上传文件:
jobs: build: runs-on: server-dev steps: - name: Backup existing uploads directory run: | # 备份当前工作目录下的uploads(路径根据实际情况调整) BACKUP_DIR="/tmp/uploads_backup" if [ -d "./src/uploads" ]; then mkdir -p ${BACKUP_DIR} cp -r ./src/uploads/* ${BACKUP_DIR}/ fi - uses: actions/checkout@v2 - name: Restore uploads directory run: | BACKUP_DIR="/tmp/uploads_backup" TARGET_DIR="./src/uploads" if [ -d "${BACKUP_DIR}" ]; then mkdir -p ${TARGET_DIR} cp -r ${BACKUP_DIR}/* ${TARGET_DIR}/ rm -rf ${BACKUP_DIR} fi # 后续步骤保持不变 - name: Install Nodejs Dependencies run: npm ci - name: 'Create env file' run: | touch .env echo PORT="8081" >> .env cat .env - name: Run Server run: npm run start:stage
方案2:将uploads目录移至代码目录外(推荐长期方案)
把用户上传文件与代码目录彻底分离,从根源避免覆盖问题:
- 在EC2上创建独立的存储目录,比如
/data/app_uploads,并配置好应用进程的读写权限。 - 修改Node.js应用的配置文件,将上传文件的保存路径改为这个新目录(例如修改
config.js里的uploadDir字段为/data/app_uploads)。 - 在仓库的
.gitignore中添加src/uploads/,确保该目录不会被误提交到Git。 - 重新部署后,上传的文件会直接保存到独立目录,不受代码更新的影响。
补充:修正paths-ignore的语法错误
你的YAML配置里用了//注释,这不符合YAML语法规范,会导致配置异常,应改为#:
on: push: paths-ignore: - 'src/uploads/**' # 这里用#添加注释,而非// branches: [ main ]
内容的提问来源于stack exchange,提问作者Ajith
相关产品推荐
相关产品推荐

