Ubuntu
Jenkins編譯後重啟Java應用程序的Bash腳本
我是linux的菜鳥!我有我的伺服器並安裝了詹金斯。我需要創建 bash 腳本,它應該在 jenkins 編譯後執行應用程序(或者如果它已經啟動,它將重新啟動)。我嘗試在 linux 中使用 screen util,但它不適合我。我寫了這個腳本:
screen -X -S JavaTelegramBot quit screen -d -m -S JavaTelegramBot screen -X -S JavaTelegramBot java -jar "path/to/jar"
當我給小費
screen -ls
時,它是空的,因此應用程序無法正常工作。我什至嘗試使用 nohup。它只是啟動應用程序幾秒鐘,直到詹金斯完成他的建構。建構後在 jenkins 中使用 cmd 命令啟動的腳本
這是由於 Jenkins 的Process Tree Killer造成的,它會在作業退出後終止 Jenkins 作業啟動的所有程序(即使您使用 screen/tmux/nohup/etc 在後台執行作業)。
根據上面連結的文件,防止 Jenkins 殺死您長時間執行的程序的方法是設置一個環境變數:
如果您的建構想要留下一個守護程序執行……
實現此目的的一種便捷方法是更改 Jenkins 的 ProcessTreeKiller 正在尋找的環境變數 BUILD_ID。這將導致 Jenkins 假設您的守護程序不是由 Jenkins 建構生成的。例如:
BUILD_ID=dontKillMe /usr/apache/bin/httpd
在 Jenkins Pipeline 的情況下,使用 JENKINS_NODE_COOKIE 而不是 BUILD_ID