小团队小体量单体架构下利用Jenkins的构建部署

/ 运维 / 没有评论 / 361浏览

使用到的工具有中间件有Jenkins,Gitlab,Maven等...

由于小团队,并且业务系统相对访问量不大,所以需要易于管理好用的一套构建部署流程;以下是我做过的一套流程,仅供参考(以下案例为针对Java语言项目);

1.测试服务器:

测试中频繁的接口修改,前后端联调;平时可以在局域网中互联各自开发电脑联调,或者后端远程测试服务器联调;

所以针对于这类场景,使用本地脚本的方式直接上传部署测试服务器更加的灵活方便,具体流程如下:

1)本地进行构建打包

2)编写脚本,直接进行上传部署项目(Tomcat):

ssh root@xx.xx.xx.xx "ps -ef | grep -v grep | grep wftest  | awk '{print $2}' | xargs kill -9";
scp C:/wf/wfcm/target/wfcm-api.war  root@xx.xx.xx.xx:/opt/wftest/webapps;

ssh root@xx.xx.xx.xx "sh /opt/wftest/bin/startup.sh";

一般这一套下来够用了,并不需要发版推送git等操作;

2.正式服务器:

使用应用服务器拉取代码构建流程为:

提交master分支代码和标签 -> 操作slb负载切换平滑部署 -> 操作Jenkins.选择相应的标签进行部署,执行正式服务器写好的脚本 -> 服务器脚本执行,拉取代码,构建打包,重新部署服务 -> 切换slb设置; 

1)准备好Jenkins服务(已经配置好Jenkins服务,安装Git相关插件,配置密钥允许拉取代码等):

 安装好Git Parameter插件,选择使用参数化构建,使用标签,名称使用tag,供后面使用变量,默认值-1

 2)配置好Git相关内容,此处供参数化使用,我们并没有使用Jenkins拉取的代码

 3)执行正式服务器中的脚本

 执行脚本:

#!/bin/bash

#不选择标签则执行失败
if [ $tag == -1 ];then
    echo "请选择标签"
    exit 2
fi

echo "`date`开始构建master分支,tag->$tag"

#远程执行正式服务器命令
ssh  root@xx.xx.xx.xx > /dev/null 2>&1 << eeooff

#将定时任务内容去除,此处为检测服务是否宕机的重启操作
echo '' > /usr/local/crontab/restart_tomcat/all_check.sh

#该服务器部署了三台不同接口的Tomcat
echo '关闭服务器---------------------------------------------------------'
ps -ef | grep -v grep | grep tomcat-1  | awk '{print $2}' | xargs kill -9
ps -ef | grep -v grep | grep tomcat-2  | awk '{print $2}' | xargs kill -9
ps -ef | grep -v grep | grep tomcat-3  | awk '{print $2}' | xargs kill -9
sleep 1s

echo '开始构建项目---------------------------------------------------------'

#拉取选择的标签代码
cd /opt/maven/wfcm
git fetch --all
git checkout master
git reset --hard $tag
#git reset --hard origin/master
mvn clean package -Dmaven.test.skip=true

#分发war包
cd /opt/tomcat/tomcat-1/webapps/
rm -rf *
cp /opt/maven/wfcm/target/wfcm-api.war ./
cd /opt/tomcat/tomcat-2/webapps/
rm -rf *
cp /opt/maven/wfcm/target/wfcm-api.war ./
cd /opt/tomcat/tomcat-3/webapps/
rm -rf *
cp /opt/maven/wfcm/target/wfcm-api.war ./
rm -f /opt/maven/wfcm/target/wfcm-api.war

echo '重启服务器---------------------------------------------------------'
/opt/tomcat/tomcat-1/bin/startup.sh
/opt/tomcat/tomcat-2/bin/startup.sh
/opt/tomcat/tomcat-3/bin/startup.sh

#重新写入定时任务,检查服务
cat > /usr/local/crontab/restart_tomcat/all_check.sh<< EOF
#!/bin/sh
. /etc/profile
/usr/local/crontab/restart_tomcat/check_tomcat.sh tomcat-1
/usr/local/crontab/restart_tomcat/check_tomcat.sh tomcat-2
/usr/local/crontab/restart_tomcat/check_tomcat.sh tomcat-3
EOF

exit
eeooff

echo "`date`脚本结束!!!"

 定时任务脚本:

#crontab -l
*/1 * * * * /usr/local/crontab/restart_tomcat/all_check.sh

#all_check.sh
#!/bin/sh
. /etc/profile
/usr/local/crontab/restart_tomcat/check_tomcat.sh tomcat-1
/usr/local/crontab/restart_tomcat/check_tomcat.sh tomcat-2
/usr/local/crontab/restart_tomcat/check_tomcat.sh tomcat-3

#check_tomcat.sh
#!/bin/sh
. /etc/profile

count=`ps -ef | grep $1 | grep -v grep |grep -v '/bin/sh' | awk '{print $2}'| wc -l`

if [ $count -gt 0 ];then
    echo ''
else
    echo "$1服务器进程不存在,`date '+%Y-%m-%d %H:%M:%S'`重新启动" >> /opt/restart_tomcat.log
    sh /opt/tomcat/$1/bin/startup.sh
fi

 4)都配置完成后,执行会出现选择框

 以上就是一套流程,可以保障程序构建部署,回滚,以及监控重启等;

还有一种就是使用Jenkins来拉取代码,构建后远程发布到正式服务器,然后进行部署: