【发布时间】:2022-08-23 13:49:45
【问题描述】:
我想在 jenkins 上运行命令 http-server 命令。这是一个连续运行的命令,在我们执行 CTRL+C 之前它永远不会断开连接。发生的情况是作业失败,因为命令永远不会完成。任何解决方案。我希望服务器运行并且詹金斯工作能够成功任何解决方案?
更新:我在python中使用os库制作了一个脚本并在那里配置了命令并运行该脚本这对我有用
标签: ubuntu jenkins google-cloud-platform
我想在 jenkins 上运行命令 http-server 命令。这是一个连续运行的命令,在我们执行 CTRL+C 之前它永远不会断开连接。发生的情况是作业失败,因为命令永远不会完成。任何解决方案。我希望服务器运行并且詹金斯工作能够成功任何解决方案?
更新:我在python中使用os库制作了一个脚本并在那里配置了命令并运行该脚本这对我有用
标签: ubuntu jenkins google-cloud-platform
任何由 Jenkins 执行的命令产生的进程都将是 Jenkins 进程的子节点。根据设计,Jenkins 会在构建完成后终止构建所典当的所有进程。
此功能称为ProcessTreeKiller。对于 Freestyle Jobs,Jenkins 文档传统上建议在作业的 Execute Shell 步骤中设置以下环境变量。
export BUILD_ID=dontKillMe
Pipeline 项目需要类似的环境变量设置。
export JENKINS_NODE_COOKIE=dontKillMe
如果要全局禁用此功能,可以使用以下 Java 系统属性
java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war
最近,Jenkins 项目也建议使用守护进程包装器。
daemonize -E BUILD_ID=dontKillMe http-server
您还可以实现消息队列或其他异步服务
【讨论】:
BUILD_ID 怎么办?让 HTTP 服务器永久运行似乎仍然是最可靠的方法,因为手头的问题将变成非问题。
您如何将命令作为后台进程执行?
http-server > /dev/null 2>&1 &
【讨论】:
& 分离控制台是重要的部分。
不要使用CtrlC,但使用CtrlZ- 或使用& 分离控制台(第二个选项更适合编写脚本)。
在 Jenkins 上,您可能还想获取该进程的 PID,以便再次杀死它;否则,您将在每个构建中产生一个新进程。设置 Apache 或 Ngnix 可能会提供更可靠的体验;否则,您将不得不弄乱 PID,而不仅仅是部署(无论如何,脚本最终都不会在 http-server 上运行)。
【讨论】: