GitHub Actions部署Jar成功但输出无变更的问题解决
解决GitHub Actions部署Jar包后无变更的问题
以下是针对你的问题的具体排查和修复步骤,结合你的工作流脚本逐一分析:
一、验证S3中的Jar包是否为最新版本
你的部署脚本依赖从S3下载example-SNAPSHOT.jar,如果构建环节未将最新Jar包上传到对应S3路径,部署的始终是旧包,自然看不到变更:
- 临时在
aws s3 cp命令后添加校验逻辑,对比下载包的哈希值与本地手动部署包:aws s3 cp s3://${{secrets.AWS_BUCKET_NAME}}/example-SNAPSHOT.jar ${{secrets.DEV_APP_FOLDER}}/example-SNAPSHOT.jar # 添加哈希校验 echo "下载的Jar包哈希值:" sha256sum ${{secrets.DEV_APP_FOLDER}}/example-SNAPSHOT.jar
二、修复脚本中的参数错误并捕获启动日志
你的脚本存在明显的参数拼写错误,且无启动日志导致无法排查失败原因:
- 修正参数拼写:
SENDGRID_API_KEY多了多余的前缀S:'S${{secrets.SENGRID_API_KEY}}'→'${{secrets.SENGRID_API_KEY}}'DAWS_S3_BUCKET、DAWS_S3_OBJECT_KEY应为AWS_开头,修正为${{secrets.AWS_S3_BUCKET}}、${{secrets.AWS_S3_OBJECT_KEY}}
- 保留启动日志:将
nohup输出从/dev/null改为日志文件,同时添加进程检查:# 替换原nohup命令 nohup java -DB_HOST=${{secrets.DEV_DB_HOST}} -DB_USER=${{secrets.DEV_DB_USER}} -DB_PASS='${{secrets.DEV_DB_PASS}}' -DSENDGRID_API_KEY='${{secrets.SENGRID_API_KEY}}' -DAWS_S3_BUCKET_NAME='${{secrets.AWS_S3_BUCKET}}' -DAWS_S3_OBJECT_KEY='${{secrets.AWS_S3_OBJECT_KEY}}' -jar ${{secrets.DEV_APP_FOLDER}}/example-SNAPSHOT.jar > ${{secrets.DEV_APP_FOLDER}}/app.log 2>&1 & # 延迟检查进程状态 sleep 5 ps aux | grep example-SNAPSHOT.jar
三、确保进程被彻底杀死并释放端口
npx kill-port可能存在端口未完全释放的情况,改用更可靠的进程终止方式:
# 杀死所有运行该Jar包的进程 pkill -f example-SNAPSHOT.jar || true # 强制清理占用目标端口的进程 lsof -i :${{secrets.APP_PORT}} | grep -v PID | awk '{print $2}' | xargs kill -9 || true
替换原脚本中的npx kill-port命令,避免旧进程占用资源导致新应用无法启动。
四、验证路径与文件操作的正确性
添加目录和文件校验,确保脚本在正确路径下执行:
cd ${{secrets.DEV_APP_FOLDER}} pwd # 打印当前目录,确认路径是否正确 ls -l # 查看文件列表,确认旧包已删除、新包已下载
同时检查chmod -R 777 example-SNAPSHOT.jar是否生效,避免因权限问题导致应用无法启动。
五、检查AWS权限与安全组操作
确认服务器上的aws s3 cp命令有足够权限访问目标文件:
aws s3 ls s3://${{secrets.AWS_BUCKET_NAME}}/example-SNAPSHOT.jar # 验证文件可访问
另外,安全组的授权/撤销操作可通过AWS控制台确认是否生效,避免因IP未正确白名单导致SSH操作异常。
内容的提问来源于stack exchange,提问作者Mahabubur Rahman
相关产品推荐
相关产品推荐

