书到用时方恨少,事非经过不知难。这篇文章主要讲述利用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脚本 1deploy-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 &
&
mvnclean -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"
2common_restart.sh启动jar包的脚本
#!/bin/sh
source /etc/profile
java_HOME=/usr/bin/javaproject_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项目)】
推荐阅读
- linux部署项目,验证码不显示
- 已经安装好的gitlab汉化
- Redis 数据类型介绍
- linux dmidecode 获取CPU ID等系统硬件信息
- 手把手搭建单域多站点企业IT实战环境系列课程之第三季(基于VLMCSD搭建二合一KMS激活服务器)
- K8S疏散错误
- 软件测试必备Linux(21天掌握Linux命令 chmod)
- ubuntu-nfs
- 主机批量执行指令脚本工具推荐——WGCLOUD