当前位置: 首页 > 知识库问答 >
问题:

java - github actions 报错,怎么解决?

左丘积厚
2024-08-23

有没有大佬来帮我看一看,是关于github actions的,我在实现一个推送代码到指定分支上时,会自动触发在远程目标服务器上面部署运行springboot项目,但是每一次运行到以下代码的时候:

....
# 进入部署路径并启动新进程
            cd ${{ env.DEPLOY_PATH }}/jar && \
            setsid ${{ env.JDK_HOME }}/java -jar ${{ env.JAR_FILE }}.jar -Xmx256M -Xms256M > app.log 2>&1 < /dev/null &
          
            # 输出日志以确认进程已启动
            echo 'Spring Boot application started and running in the background.'
          "

它就会一直卡在这里。但是事实上,这一个项目是被正确运行了,监听端口也有信息,但是工作流中会报错:

Spring Boot application started and running in the background.
client_loop: send disconnect: Broken pipe
Error: Process completed with exit code 255.

我有一点不明白,部署成功之后,不就是应该断开ssh连接吗?有没有大佬解决一下?

因为这个地方报错,所以它工作流就一直显示是错误的,即使产生效果是正确的,我试图用exit命令来直接结束与目标服务器的ssh连接,但还是报这个错误,我又把目标服务器上面的连接时长设置长了一点,还是报错

共有1个答案

齐栋
2024-08-23

这个问题通常是由于在GitHub Actions中通过SSH连接到远程服务器并执行命令时,SSH会话的关闭方式不正确导致的。在你的情况中,虽然Spring Boot应用已经成功启动并在后台运行,但SSH会话可能因为某些原因(如输出重定向)被异常中断,导致GitHub Actions认为命令执行失败。

这里有几个可能的解决方案:

  1. 使用nohup&确保进程在后台运行
    在你的命令中,你已经使用了&来将进程放入后台,但可以使用nohup来确保即使SSH会话断开,进程也会继续运行。修改后的命令如下:

    cd ${{ env.DEPLOY_PATH }}/jar && \
    nohup ${{ env.JDK_HOME }}/java -jar ${{ env.JAR_FILE }}.jar -Xmx256M -Xms256M > app.log 2>&1 &
    echo 'Spring Boot application started and running in the background.'

这里nohup会忽略所有挂断(SIGHUP)信号,使得进程在SSH会话断开后继续运行。

  1. 检查SSH命令的退出状态
    确保你的SSH命令(如果你使用的是ssh命令来连接服务器)正确设置了退出状态。如果SSH命令因为某些原因(如网络问题)失败,它可能会返回非零退出状态,导致GitHub Actions认为整个步骤失败。
  2. 使用wait命令等待后台进程
    如果你需要确保Spring Boot应用完全启动后再继续执行其他命令(虽然在这个场景下可能不是必需的),你可以使用wait命令等待后台进程结束(尽管在这个案例中,由于Spring Boot应用是设计为长期运行的,你可能不需要这样做)。但请注意,wait会阻塞当前shell直到所有后台作业完成,这在你希望SSH会话立即断开的情况下不适用。
  3. 检查GitHub Actions的配置
    确保你的GitHub Actions配置中没有其他可能导致流程中断或失败的步骤。有时,错误可能并不直接来自你展示的这部分代码。
  4. 日志和调试
    增加更多的日志输出,以帮助诊断问题。你可以在SSH会话中运行额外的命令来检查Spring Boot应用的状态,例如使用curl来检查应用是否响应。
  5. 使用更健壮的部署脚本
    考虑将部署逻辑封装在一个更健壮的脚本中(如bash脚本),该脚本可以更好地处理错误和异常情况。

应用上述建议之一或几个,应该能帮助你解决GitHub Actions中遇到的问题。

 类似资料: