web-dev-qa-db-ja.com

jenkinsで機能しないフリースタイルシェルスクリプトのトラップ

gracefull誰かがJenkinsジョブを中止した場合にそれを強制終了したいので、中止シグナルをトラップし、シェルスクリプトを使用して強制終了ステップをカスタマイズしようとしました。
しかし、ジェンキンスはすべての罠を無視し、とにかく強制的に殺しているようです
テストするサンプルスクリプト

exit_script() {
    echo "Printing something special!"
    echo "traped &  killed " >>text.txt
    echo "Maybe executing other commands!"
    trap - INT TERM ABRT  QUIT HUP # clear the trap
    kill -- -$$ # Sends SIGTERM to child/sub processes
}

trap 'exit_script' INT KILL ABRT QUIT HUP

echo "pid is $$"
echo "pid is $$" > test.txt
count=0
sleep 10
echo 1
echo 1 >>test.txt
sleep 10
echo 2
echo 2 >>test.txt
sleep 10
echo 3
echo 3 >>test.txt
sleep 10
echo 4
echo 4 >>test.txt
sleep 10
echo 5
echo 5 >>test.txt
sleep 10
echo 6
echo 6 >>test.txt
exit 0

[〜#〜] sigterm [〜#〜]シグナルをトラップし、jenkinsでkillコマンドをカスタマイズする方法を探しています。

参考:このスクリプトは私のシステムbashで正常に機能し、INT-> SIGINTなどを変更する必要があります。

3
Sudhanshu Patel

いくつかの修正が必要なだけで、正常に機能していると思います。トラップに関連する関数に問題がある場合、つまりexit_script()は機能しません。

kill -- -$$を削除してテストしましたが、関数が呼び出されても正常に動作し、プロセスは引き続き実行されます。

1
Shan

一般に、シェルスクリプトでは、次のように言ってSIGTERMシグナルをトラップします。

trap 'exit_script' TERM

P.S. KILLのトラップは機能せず、QUITを2回リストしても役に立ちません。

0
Scott