Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。SpringCloud是时下里最火的框架,由于springcloud涉及众多微服务,对于开发团队而言,使用Jenkins做部署测试,开发环境分支将极大的提升团队合作效率。
本文将会讲解如何部署微服务、配置中心、Vue(无网环境),不仅是在同一主机远程主机部署也可以(微服务项目与Jenkins不在同一机器),更新配置中心,自动化部署Vue项目,其中涉及到比较多的脚本。可以自己灵活变动。
一、 Jenkins下载安装
下载Jenkins的war包https://www.jenkins.io/download/
启动Jenkins:java -jar /root/SoftWare/Jenkins/jenkins.war --httpPort=8899
nohup java -jar /root/SoftWare/Jenkins/jenkins.war --httpPort=8899 >/root/SoftWare/Jenkins/jenkins.log 2>&1 &
二、 更新配置中心文件
1. 新建任务
新建一个自由风格的Jenkins任务
注意任务名字,Jenkins会自动在自己的工作空间下生成这个任务名字的文件夹,当我们从git上拉代码下来的时候会自动放在这个工作空间下。
2. 配置Git
在【源码管理】配置git上的地址
3. 配置环境变量
在Jenkins机器新增$WORKSPACE环境变量
#用户环境变量 vim ~/.bash_profile #在文件末尾加上 export PATH=$PATH:/usr/local/php/bin #全局环境变量。我们在这里添加$WORKSPACE的环境变量 vim /etc/profile 在文件末尾 export PATH=$PATH:/usr/local/php/bin export WORKSPACE=$PATH:/root/.jenkins/workspace #设置立即生效 source /etc/profile #查看所有变量 env #查看单个变量 echo $PATH
4. 构建Shell
【构建】中填写我们的shell脚本
其中$WORKSPACE是我们在Jenkins中新增的系统变量。找到我们的Jenkins的工作空间。
#!/bin/bash #author eric #time 2020-09-22 . /etc/profile time=`date +%Y_%m_%d-%H:%M:%S` project_dir=$WORKSPACE/springcloud-config cd $project_dir remote_server=192.168.1.8 remote_user=root remote_dir=/springcloud-config/properties/ if [ $? -eq 0 ] then cd $project_dir && pwd && rsync -avz properties/ $remote_user@$remote_server:$remote_dir echo $time else echo "update faild " echo $time fi
5. 构建项目
Git上传代码到配置中心,然后点击构建项目。去192.168.1.8的/springcloud-config/properties/目录查看文件的更新时间
三、 部署微服务
1. 新建任务
新建一个自由风格的Jenkins任务
2. 配置Git
在【源码管理】配置git上的地址
3. 准备脚本
首先我们要明确代码的来源流向。Jenkins从GitLab上拉去代码到Jenkins的工作空间即$WORKSPACE,然后我们执行打包命令mvn clean package -Dmaven.test.skip=true或者使用Gradle的gradle build进行代码构建,生成微服务的jar包,然后把jar包拷贝到我们发布的文件夹,这个文件夹中有停止之前线程的脚本和启动新jar包的脚本。这样一个闭环就形成了。这里我们有几个比较有用的脚本。stop.sh、start.sh、cutlog.sh这三个脚本都放在我们发布jar包的地方。最终的样子就是,这个目录会有这三个脚本和我们的微服务的jar包还有nohup.out我们jar包生成日志文件。通过cutlog.sh我们可以把大日志切分。
stop.sh停止微服务的进程
#!/bin/bash #author eric #time 2020-09-22 num=`ps -ef|grep base-server-web | grep -v grep |awk '{print $2}'|wc -l` if [ $num -ne 1 ] then echo "go next step" else ps -ef|grep base-server-web | grep -v grep |awk '{print $2}'|xargs kill -9 fi
start.sh启动微服务
#!/bin/bash #author eric #time 2020-09-22 nohup java -Xms256m -Xmx512m -jar /home/testdir/base_server/*.jar --spring.profiles.active=test &
cutlog.sh切分日志
#!/bin/bash #author eric #time 2020-0922 #version 0.0.1 time=`date +%Y-%m-%d --date="-1 day"` cd /home/testdir/base_server echo $time cp nohup.out nohup.out-$time && echo "" > nohup.out sleep 3 sh stop.sh sleep 2 sh start.sh >>./nohup.out
4. 【构建环境】
在构建环境中勾选Execute shell script on remote host using ssh。然后填入脚本
cd /home/testdir/spirngcloud_base sh stop.sh cd /home/testdir/spirngcloud_base sh start.sh >>./nohup.out
5. 同一机器构建Shell
#!/bin/bash #author eric #time 2020-09-22 #version v0.0.1 . /etc/profile project_name=base-server-web project_dir=$WORKSPACE/base_service/base-server-web cd $project_dir && gradle build if [ $? -eq 0 ] then echo "gradle build success " else echo -e '\033[31m[ error ] gradle build faild \033[0m' && exit 1 fi sleep 2 base_dir=/home/testdir/base_server cp $WORKSPACE/base_service/base-server-web/build/libs/*.jar $base_dir cd $base_dir #nohup java -Xms256m -Xmx512m -jar /home/testdir/base_server/*.jar & >/dev/null 2>&1 sh stop.sh
6. 远程机器构建Shell
#!/bin/bash #author caoyx #time 2020-06-02 #version v0.0.3 . /etc/profile project_name=app-server-web #project_dir=/root/.jenkins/workspace/test01/builder-server-web project_dir=/root/.jenkins/workspace/ningxia-ma-user/user-server-web cd $project_dir && gradle build if [ $? -eq 0 ] then echo "gradle build success " else echo -e '\033[31m[ error ] gradle build faild \033[0m' && exit 1 fi sleep 2 remote_server=192.168.1.8 remote_user=root remote_dir=/home/testdir/ma_user # scp jar to remote server echo " start rsync jar to remote server " new_jar=$project_dir/build/libs/user-server-web-1.0.jar cd $project_dir/build/libs/ && pwd && rsync -avz $new_jar $remote_user@$remote_server:$remote_dir if [ $? -eq 0 ] then echo "rsync jar to remote server sucess !" else echo -e '\033[31m[ error ] rsync jar to remote server faild \033[0m' && exit 1 fi
四、 部署Vue项目
1. 新建任务
新建一个自由风格的Jenkins任务
2. 配置Git
在【源码管理】配置git上的地址
3. 无网环境
如果是无网环境,在我们配置完git地址后,执行构建,然后在$WORKSPACE中就可以看到我们的vue项目文件夹,进入后,需要把我们vue的node_module拷贝到这个文件夹中。
4. 同一机器构建Shell
#!/bin/bash #author eric #time 2020-09-22 . /etc/profile time=`date +%Y_%m_%d-%H:%M:%S` project_dir=$WORKSPACE/web_user cd $project_dir && yarn run build if [ $? -eq 0 ] then #aim_dir=/usr/local/apply/nginx/html aim_dir=/home/application/nginx/html cd $aim_dir && mv web web_$time cd $project_dir && cp -r dist $aim_dir cd $aim_dir && mv dist web #cd $aim_dir echo $time else echo " update faild" echo $time fi
5. 远程机器构建Shell
#!/bin/bash #author eric #time 2020-09-22 . /etc/profile time=`date +%Y_%m_%d-%H:%M:%S` project_dir=$WORKSPACE/web_user cd $project_dir && yarn run build remote_server=192.168.1.8 remote_user=root remote_dir=/home/frontmanager/nginx/html/userdist/ if [ $? -eq 0 ] then cd $project_dir && pwd && rsync -avz dist/ $remote_user@$remote_server:$remote_dir echo $time else echo "update faild " echo $time fi