1

我想要一份 Jenkins 工作,它会杀死端口 5000 (bash) 上的所有进程。简单的解决方案

fuser -k 5000/tcp

当我在终端中执行此命令时工作正常,但在 Jenkins(“执行 shell”)上将构建标记为失败。

我也试过

kill $(lsof -i -t:5000)

但同样,由于它在常规终端上工作,在詹金斯我得到

kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
Build step 'Execute shell' marked build as failure

任何想法如何解决这一问题?

4

5 回答 5

5

我有同样的问题。当进程未运行时,它不起作用。bash刚刚做到了,但詹金斯失败了。

如果 bash 命令失败,您可以在 jenkins 作业中添加一个|| true以指示 jenkins 继续该作业。

所以是:

fuser -k 5000/tcp || true

如果执行 shell 失败,请参见不要让 jenkins 构建失败

于 2017-09-04T12:16:51.180 回答
2

尝试将命令与路径

/usr/bin/kill $(/usr/sbin/lsof -i -t:5000)

如果运行 jenkins 服务的用户与在端口 5000 上运行进程的用户不同,您将无法终止该进程。也许您需要使用 sudo 运行它。

尝试这个

su -s jenkins #Or the user who run jenkins
/usr/bin/kill $(/usr/sbin/lsof -i -t:5000)
于 2017-06-21T14:13:29.490 回答
0

我遇到了同样的问题,在许多情况下标准输入/输出被禁用(特别是当你有 ssh 到目标机器时)。您可以做的是在目标服务器中创建一个可执行的 shell 文件并执行该文件。

因此,该步骤如下所示:

步骤1 。-> 创建外壳文件

 cat > kill_process.sh << EOF
 target_port_num=\`lsof -i:\${1} -t\`;
 echo "Kill process at port is :: \${target_port_num}"
 kill -9 \${target_port_num}
 EOF

第2步 。-> 使其可执行 chmod +x process_killer.sh

步骤 3。-> 执行shell并传递端口号./process_killer.sh 3005

希望这有帮助。

于 2019-01-18T22:04:45.030 回答
0

maybe jenkins user can't see the processes because of privileges so the expansion of $(lsof ..) is empty.

the error output may not be complete because if lsof call fails there will be a message on stderr.

于 2017-06-21T14:05:33.627 回答
0

问题是 $ 是 jenkins 命令中的特殊字符。这意味着您指的是 ENV VAR。

您应该尝试编写用单引号括起来的命令。

于 2017-06-22T15:38:52.690 回答