2017-06-21 3 views
0

ポート5000(bash)のすべてのプロセスを強制終了するJenkinsジョブを実行したいと思います。 簡単な解決策Jenkins経由で特定のポート上のすべてのプロセスを終了させる

fuser -k 5000/tcp 

はマークが失敗として構築し、私はターミナルで次のコマンドを実行すると正常に動作しますが、ジェンキンス上(「シェルを実行します」)。それは、通常の端末上で動作するように私は、また

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 

任意のアイデアを得ますか?

答えて

0

多分、jenkinsユーザーは特権のためにプロセスを見ることができないので、$(lsof ..)の拡張は空です。

lsof呼び出しが失敗した場合、stderrにメッセージが表示されるため、エラー出力が完了しないことがあります。

0

はジェンキンスサービスを実行しているユーザーは、あなたがプロセスを強制終了することができませんポート5000上のプロセスを持つユーザーと同じでない場合は、パス

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

とコマンドを入れて試してみてください。たぶんsudoでこれを実行する必要があります。

問題は$はジェンキンスコマンドで特別な文字であるということである。この

su -s jenkins #Or the user who run jenkins 
/usr/bin/kill $(/usr/sbin/lsof -i -t:5000) 
0

を試してみてください。それはあなたがENV VARを参照していることを意味します。

ラップされたコマンドを一重引用符で書きます。

0

私は同じ問題を抱えていました。プロセスが実行されていないときには機能しませんでした。 bashそれだけでしたが、ジェンキンは失敗しました。

jkenkinsジョブに|| trueを追加して、bashコマンドが失敗した場合にジーンキンがジョブを続行するように指示できます。

だから、その:

fuser -k 5000/tcp || true 

don't fail jenkins build if execute shell fails

見ます
関連する問題