利用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构建任务常用的三种模式

Jenkins——Jenkins 构建Maven项目(三种风格的项目构建自由风格Maven风格Pipeline流水线风格)

jenkins使用2----基本实例

Jenkins 创建自由风格Maven类型和流水线类型的任务,进行项目拉取编译自动部署

Jenkins 创建自由风格Maven类型和流水线类型的任务,进行项目拉取编译自动部署