jenkins 如何發布用java -jar來啟動的java項目


對於一些jenkins無法管理的項目,該如何做自動發布?

最近遇到了一些使用jenkins無法發布的java項目,比如用nohup java -jar xxx.jar & 啟動的項目,在用jenkins發布時會遇到進程夯住的情況。
所以我們需要把對應的項目做成linux下的服務,可以做成systemd管理的服務。這樣我們在發布完項目之后只需執行systemctl restart xxx即可。

如xxl-job項目

  1. 首先我們需要寫好腳本
    cat /opt/shell/manage-service/restart-jar-service.sh
#!/bin/bash
# 專門用來管理老的用java -jar的方式啟動服務,解決無法通過jenkins 服務重啟該服務的問題
# author: Yangning
# datetime: 20210816
# 如
# jarName="xxl-job-admin-2.3.0-SNAPSHOT.jar"
# workDir="/data/server/dubbo-service/xxl-job/"
if [[ "$#" -ne 3 ]];then
	echo "total required three parameters"
	echo "Usage: $0 service/work/directory jarname start|stop|status)"
	exit 1
fi
if [[ ! -d "$1" ]] || [[ ! -f "$1/$2" ]];then
	echo "$1 is not directory or $1$2 is not file"
	exit 2
fi
if [[ "$3" != "start" ]] && [[ "$3" != "stop" ]] && [[ "$3" != "status" ]];then
	echo "Third parameter is error, $3 must be start|stop|status"
	exit 3
fi
source /etc/profile
workDir=$1
jarName=$2
action=$3



set -x
function start (){
    start_check_pid=$(ps -ef|grep -v grep|egrep "java\s+-jar\s+$jarName"|awk '{print $2}')
	if [[ "$start_check_pid" == "" ]];then
		echo $(which java)
		cd $workDir && java -jar "$jarName" > /dev/null 2>&1 &
		start_pid=$(ps -ef|grep -v grep|egrep "java\s+-jar\s+$jarName"|awk '{print $2}')
		if [[ "$start_pid" != "" ]];then
			echo "$jarName start success, runing... PID $start_pid"
		else
			echo "$jarName start failed"
		fi
	else
		echo "$jarName is Already start, running PID $start_check_pid"
	fi
}

function stop (){
    stop_check_pid=$(ps -ef|grep -v grep|egrep "java\s+-jar\s+$jarName"|awk '{print $2}')
	if [[ "$stop_check_pid" == "" ]];then
		echo "$jarName Already stoped"
	else
		kill -9 $stop_check_pid
		stop_pid=$(ps -ef|grep -v grep|egrep "java\s+-jar\s+$jarName"|awk '{print $2}')
		if [[ "$stop_pid" == "" ]];then
			echo "$jarName stoped success, PID $stop_check_pid is gone "
		else
			echo "$jarName stop failed"
		fi
	fi
}

# 這個函數在systemd中沒有用到
function status (){
	server_status=$(ps -ef|grep -v grep|egrep "java\s+-jar\s+$jarName")
	echo $server_status
	if [[ "$server_status" == "" ]];then
		echo "$jarName died..."
	else
		echo "$jarName running..."
	fi
}

case $action in
  start)
  	start
  	;;
  stop)
  	stop
    ;;
  restart)
  	stop
	start
    ;;
  status)
  	status
    ;;
  *)
  exit
      ;;
esac
  1. 做成systemd管理的服務
    cat /usr/lib/systemd/system/xxl-job.service
[Unit]
Description=xxl-job server
Wants=network-online.target
After=network.target

[Service]
Type=forking
WorkingDirectory=/opt/shell/manage-service/
ExecStart=/bin/bash restart-jar-service.sh /data/server/dubbo-service/xxl-job/ xxl-job-admin-2.3.0-SNAPSHOT.jar start
ExecStop=/bin/bash restart-jar-service.sh /data/server/dubbo-service/xxl-job/ xxl-job-admin-2.3.0-SNAPSHOT.jar stop
ExecReload=/bin/bash restart-jar-service.sh /data/server/dubbo-service/xxl-job/ xxl-job-admin-2.3.0-SNAPSHOT.jar restart
Restart=on-failure

[Install]
WantedBy=multi-user.target


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM