【问题标题】:Run a background process permanently on a node through a script on Jenkins and let Jenkins build successfully通过 Jenkins 上的脚本在一个节点上永久运行一个后台进程,让 Jenkins 构建成功
【发布时间】:2014-03-28 03:59:17
【问题描述】:

我正在通过一个脚本运行一个后台进程,这个脚本在 Jenkins 开始构建时被调用。但是,jenkins 构建卡住了,在查看控制台时,它似乎正在运行该进程并等待它完成。

这个过程永远不会完成,把它当作一个服务器监听它的客户端。我触发的每个构建都会杀死服务器进程并重新启动该进程,所以我完美地处理了这种情况。

有什么办法,我可以成功构建jenkins吗?

【问题讨论】:

    标签: jenkins


    【解决方案1】:

    具体细节取决于您的操作系统(您没有告诉),但 Jenkins wiki 有一个关于此的页面:https://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build

    【讨论】:

    • 这似乎几乎不可能在 Windows 上运行 Jenkins 有没有人有解决方案?我现在已经花了一整天的时间,它只是显示了 windows 作为一个真正的服务器是多么的无能
    • @wired00 可能有点晚,但请查看nssm。非常适合在 Windows 中创建、启动和停止服务
    【解决方案2】:

    您可以使用一个技巧来释放 Jenkins 线程。

    您可以做的是通过 ssh 连接执行 bash 脚本并将其发送到后台,同时将进程的 pid 保存在某处以便您可以进一步检查。

    命令的格式是:

    ssh -n _hostname_ "_commands_ & echo \$! > \"_path_to_pid_file_\"" &
    

    一个永无止境的程序示例:

    ssh -n myhost.domain.com "tail -f /var/log/my.log & echo \$! > \"$WORKSPACE/pid\"" &
    

    这个例子将产生一个 tail 进程,永远监听 /var/log/my.log 文件中的新变化,并将其 pid 存储在 $WORKSPACE/pid 文件中。

    从 Jenkins 作业执行时,ssh 进程将立即退出,而发送到后台的命令将在指定主机中继续执行。

    我这样做是为了始终保持我在构建场中运行的一项服务与存储库中它的最新代码修改保持同步。 只需有一个 ssh' 进入目标机器的作业,然后终止进程,更新服务并重新启动它。

    这可能有点麻烦,但效果很好!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 2022-07-21
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多