gpt4 book ai didi

ssh - Jenkins SSH 插件返回后,Jenkins SSH 远程进程就会被终止

转载 作者:行者123 更新时间:2023-12-02 14:09:29 27 4
gpt4 key购买 nike

Jenkins 版本:1.574

我创建了一个执行以下操作的简单作业:

  • 使用“使用 SSH 在远程主机上执行 shell 脚本”作为 BUILD 步骤之一,我只是在调用一个 shell 脚本。此 shell 脚本在 Tomcat 上执行停止和启动操作,以重新启动目标机器上的应用程序。
  • 我在 Jenkins 全局设置中为目标 SSH 服务器定义了有效的用户名、密码和端口。

  • 我看到了这种行为,当我运行 Jenkins 作业并调用重新启动脚本(将应用程序名称作为参数 $1)时,它工作正常,但是一旦“使用 SSH 在远程主机上执行 shell 脚本”步骤完成,我看到新进程在远程/目标应用程序服务器上终止。

    如果我从目标/远程服务器本身运行脚本,一切正常,新进程/PID 永远存在,但是从 Jenkins 运行相同的脚本,虽然我没有看到任何错误并且一切都按预期工作,新的一旦上述 SSH 步骤完成并且控制权返回到 Jenkins 作业中的下一个 BUILD 步骤或 Jenkins 作业完成,进程就会终止。

    我看到一些帖子/博客并尝试设置: BUILD_ID=dontKillMe 在 Jenkins 工作中(在各个地方,即准备环境变量以及使用注入(inject)环境变量......)。当作业的特定构建# 完成时,我可以看到该构建# 的环境变量确实将 BUILD_ID=dontKillMe 作为其值(而不是默认的时间戳标记值)。

    我试着把 诺哈普在调用重启脚本之前,即
    nohup restart_tomcat.sh "${app}"

    我也试过:
    BUILD_ID=dontKillMe nohup restart_tomcat.sh "${app}"

    这不会给出任何错误并创建 nohup.out远程服务器上的文件(但我并不担心它,因为 restart_tomcat.sh 脚本本身会创建自己的 LOG 文件,在 restart_tomcat.sh 脚本完成后我正在“cat”该文件。在日志文件中添加 cat使用另一个“使用 SSH 在远程主机上执行 shell 脚本”构建步骤执行,它成功显示了由重启脚本创建的日志文件)。

    我不知道此时我错过了什么,但只要 restart_tomcat.sh步骤完成后,远程/目标服务器上的新 PID/进程死亡。

    我怎样才能解决这个问题?

    最佳答案

    我自己也经历过。

    在我的第一次迭代中,在我知道 Jenkins ProcessTreeKiller 之前,我最终只是守护了Tomcat。 Apache Tomcat 文档包括 section on running as a daemon .

    您也可以尝试禁用 进程树杀手 对于您的整个 Jenkins 实例,如果它相对较小(请阅读第一个链接以获取信息)。
    BUILD_ID=dontKillMe应该传递给 shell,因此它应该在你的命令行中,而不是在 Jenkins 全局配置或作业参数中。
    BUILD_ID=dontKillMe restart_tomcat.sh "${app}"应该没有问题。

    你也可以试试nohup restart_tomcat.sh "${app}" &&在末尾。

    关于ssh - Jenkins SSH 插件返回后,Jenkins SSH 远程进程就会被终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25432799/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com