我想找一个詹金斯工作的进程ID

时间:2016-04-25 18:54:44

标签: bash shell ubuntu jenkins

我想找到一种方法来查找Jenkins作业的进程ID,因此如果作业挂起,我可以终止进程。 Jenkins实例在Ubuntu上。有时,我们无法通过Jenkins界面停止工作。如果我运行包含简单shell脚本的Jenkins作业,我可以通过终止进程ID来停止作业,我在其中手动收集进程ID,如:

#!/bin/bash
echo "Process ID: $$"
for i in {1..10000}
do
   sleep 10;
   echo "Welcome $i times"
done

在命令shell中,我可以运行sudo kill -9 [process id]并成功终止该作业。

问题是,我们的大多数工作都有多个构建步骤,并且我们在此服务器上运行了多个项目。我们的许多构建步骤都是shell脚本,Windows批处理文件,其中一些是ant脚本。我想知道如何找到Jenkins作业的进程ID,它是所有构建步骤的父进程。截至目前,我必须等到所有其他构建完成并重新启动服务器。谢谢你的帮助!

2 个答案:

答案 0 :(得分:3)

在* nix操作系统上,您可以通过调查import 'just/referencingthis/forpackaging'; 来查看正在运行的流程的环境变量,并查找Jenkins特定变量,例如/proc/$pid/environBUILD_ID等。

BUILD_URL

您可以了解cat /proc/'$pid'/environ | grep BUILD_URL 或了解正在运行的流程。

答案 1 :(得分:1)

这是我的问题的更新。为了杀死挂起(僵尸)的工作,我相信这只适用于Jenkins从与其工作相同的服务器运行的情况。我怀疑如果你试图杀死在Jenkins奴隶上运行的挂起进程,这将会有效。

#FIND THE PROCESS ID BASED ON JENKINS JOB
user@ubuntu01x64:~$ sudo egrep -l -i 'BUILD_TAG=jenkins-Wait_Job-11' /proc/*/environ
/proc/5222/environ
/proc/6173/environ
/proc/self/environ


# ONE OF THE PROCESSES LISTED FROM THE EGREP OUTPUT IS THE 'EGREP'COMMAND ITSELF, 
# ENSURE THAT (LOOP THROUGH) THE PROCESS ID'S TO DETERMINE WHICH IS
# STILL RUNNING
user@ubuntu01x64:~$ if [[ -e /proc/6173 ]]; then echo "yes"; fi 
user@ubuntu01x64:~$ if [[ -e /proc/5222 ]]; then echo "yes"; fi 
yes

# KILL THE PROCESS
sudo kill -9 5222