使用到的工具有中间件有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来拉取代码,构建后远程发布到正式服务器,然后进行部署: