利用jenkins自由风格用shell脚本进行所有项目发版(java项目)
Posted huningfei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用jenkins自由风格用shell脚本进行所有项目发版(java项目)相关的知识,希望对你有一定的参考价值。
一 jenkins设置
1 设置4个变量
如图所示:分别是,分支名字,项目名,主机,端口
选择参数化,有选项参数,字符参数,都可以2 要执行的shell脚本
#此脚本包含打包,备份,拷贝,启动功能
sudo su root -c "sh /data/os/jenkins/deploy-data-statistical.sh $project_name $branch $host $port"
二 shell脚本
1 deploy-data-statistical.sh 脚本内容:
#!/bin/bash
project_name=$1 #项目名字
branch=$2 #分支
host=$3
port=$4
currentTime=`date "+%Y%m%d_%H%M%S"`
#代码路径
dir="/root/.jenkins/workspace/$project_name"
#远端项目路径
remote_dir="/data/server_home/$project_name"
cd $dir && git pull && git checkout $branch && git pull
echo "################开始编译##########################"
sleep 2
cd $dir && mvn clean -Dmaven.test.skip=true kotlin:compile package
echo "####################开始执行备份######################"
#执行备份
ssh root@$host -p$port "[ ! -d $remote_dir/backup ] && mkdir -p $remote_dir/backup || echo \'存在\' "
ssh root@$host -p$port "mv $remote_dir/*.jar $remote_dir/backup/"
echo "#################开始拷贝jar包#######################"
#拷贝jar包到远程主机
scp -P$port -r $dir/target/*.jar root@$host:$remote_dir #不带日志的jar包
#查看新的jar包名字
jarname=`ssh root@$host -p$port "ls -lt /data/server_home/$project_name/*.jar" | awk \'{print $9}\' |awk -F \'[/]\' \'{print $5}\'`
#启动服务
echo "#################开始启动服务#######################"
ssh root@$host -p$port "cd $remote_dir && sh common_restart.sh $jarname $project_name"
2 common_restart.sh启动jar包的脚本
#!/bin/sh
source /etc/profile
JAVA_HOME=/usr/bin/java
project_name=$2
ARTIFACT_ID=$project_name
CURRENT_PATH=/data/server_home/$project_name
APP_NAME=$1
SERVER_PID=0
DATETIME=`date +%F-%H-%M-%S`
start()
{
checkpid
if [ "$SERVER_PID" != "" ]
then
echo "$APP_NAME is running!please use restart command."
exit 1;
fi
if [ "$JAVA_HOME" != "" ]
then
/usr/bin/nohup java -Xms512m -Xmx1g -jar $CURRENT_PATH/$APP_NAME --spring.profiles.active=zgy-pre --server.port=8084 > $CURRENT_PATH/${DATETIME}-running.log &
sleep 5
checkpid
if [ "$SERVER_PID" != "" ]
then
echo -e "\\e[0;35m$APP_NAME\\e[0m start over in path: \\033[46;31m$CURRENT_PATH\\033[0m,and running pid is \\033[46;31m$SERVER_PID\\033[0m"
echo -e "Please see the \\033[46;31mrunning.log\\033[0m for detatil"
else
echo -e "\\e[0;35m$APP_NAME\\e[0m start \\033[46;31mFAILURE\\033[0m"
echo -e "Please see the \\033[46;31mrunning.log\\033[0m for detatil"
exit 1;
fi
else
echo -e "JAVA_HOME can\'t acquire"
exit 1;
fi
}
stop()
{
checkpid
if [ "$SERVER_PID" != "" ]
then
echo -e "\\e[0;35m$APP_NAME\\e[0m running pid is \\033[46;31m$SERVER_PID\\033[0m, kill it at once"
kill -9 $SERVER_PID
fi
}
checkpid(){
SERVER_PID=$(ps -aef |grep java |grep "$ARTIFACT_ID" |grep -v grep | awk \'{print $2}\')
}
restart()
{
stop
sleep 5
start
}
restart
当然重启脚本里的启动环境变量和端口也都可以设置成变量,传入脚本,我这里没有弄。
最后,就可以利用jenkins去发版了,如图所示:
这里面的4个参数,都可以直接在这个上面去更改,传入到shell脚本里。
以上是关于利用jenkins自由风格用shell脚本进行所有项目发版(java项目)的主要内容,如果未能解决你的问题,请参考以下文章
Jenkins——Jenkins 构建Maven项目(三种风格的项目构建自由风格Maven风格Pipeline流水线风格)