Falle im Freestyle-Shell-Skript funktioniert nicht in Jenkins

Falle im Freestyle-Shell-Skript funktioniert nicht in Jenkins

Ich will dasanmutigBeenden meines Jenkins-Jobs, wenn ihn jemand abbricht. Also habe ich versucht, das Abbruchsignal abzufangen und den Beendigungsschritt mithilfe eines Shell-Skripts anzupassen.
Aber es scheint, als würde Jenkins alle Abfangsignale ignorieren und trotzdem zwangsweise beenden.
Beispielskript zum Testen

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

Ich suche nach einer Möglichkeit, eine Falle zu stellenSIGTERMSignalisieren und Anpassen des Kill-Befehls in Jenkins.

Zu Ihrer Information: Dieses Skript funktioniert in meiner System-Bash einwandfrei, ich muss lediglich INT->SIGINT usw. ändern.

Antwort1

Ich denke, es funktioniert einwandfrei, es sind nur ein paar Korrekturen erforderlich. Wenn es ein Problem mit der mit der Falle verbundenen Funktion gibt, exit_script()funktioniert es nicht.

Ich habe es durch Entfernen getestet kill -- -$$und es funktioniert einwandfrei, die Funktion wird aufgerufen und der Prozess wird weiterhin ausgeführt.

Antwort2

Im Allgemeinen fangen Sie in einem Shell-Skript das SIGTERM-Signal ab, indem Sie sagen:

trap 'exit_script' TERM

PS: Das Einfangen von KILL funktioniert nicht und das zweimalige Auflisten von QUIT hilft nicht.

verwandte Informationen