关于自动发布项目的经历总结

项目发布

见到过的打包发布过程

  • 目前待过几家公司主要的发布流程是通过jenkins实现自己打包,然后自动处理。也有本地打包上传到tomcat下的处理(见过感觉最low的方式)。还有就是上传相应的项目(因为不能直接连接外网down代码打包),然后使用自动化部署脚本运行、启动项目。

发布本质

  • 不管是jenkins打包发布的方式,还是直接上传使用shell脚本发布,其实本质应当是一样的。jenkins的打包步骤只是换成了jenkins自动打包而已。
  • 之前自己也部署过jenkins做自动化部署,在打包完成后jenkins可以执行脚本,我一般使用的是执行shell脚本。通过脚本去启动相关的web服务,缓存服务等。
  • 思考:其实发布的整个过程看来,都是在做一个流程。拉取代码->打包->将包放到指定位置->启动web及其相关服务(在这之前可能也会清空日志等操作)。在这整个流程中有些步骤只是通过工具做了处理而已,其实也算是在执行shell脚本做处理服务等。

上次发布中的脚本

  • 以下为项目中使用到的发布脚本(注释基本还是看得懂)
#!/bin/sh

export PROJECT_HOME=/home/admin/projects/zongzhi-center
#用于创建附件的软链的源目录
export LINK_SOURCE_HOME=/home/admin/share
#项目前缀
export PROJECT_PRE=center
#用于mvn打包的-P参数
export PFOFILE_ID=xxxx-prod
export APP_NAME=$PROJECT_PRE-webback
export WEB_APP_NAME=web
export SH_NAME=webback-$PFOFILE_ID.sh
export TOMCAT_NAME=tomcat8_qianwei
export TOMCAT_HOME=/home/admin/server/$TOMCAT_NAME
export TOMCAT_PORT=8080
export MEMCACHED_ADDR=/usr/local/bin/memcached
export MEMCACHED_PORT=11219
export REDIS_ADDR=/usr/local/bin/redis-server
export REDIS_PORT=6379
export REDIS_CONF=/etc/redis/redis_6379.conf
export ZK_SERVER_ADDR=/opt/zookeeper-3.4.13/bin/zkServer.sh

echo "停止$TOMCAT_NAME服务..."
$TOMCAT_HOME/bin/shutdown.sh

##杀掉tomcat进程
ps -ef|grep $TOMCAT_NAME | awk -F " " '{print $2}' | while read line
do
	kill $line
	sleep 3
	kill -9 $line
done
echo "停止$TOMCAT_NAME服务成功..."

echo "停止后台$APP_NAME服务..."
$PROJECT_HOME/$APP_NAME/$SH_NAME stop
echo "停止后台$APP_NAME服务成功..."

echo "重启memcached服务"
ps -ef|grep memcached | grep $MEMCACHED_PORT | awk -F " " '{print $2}'|xargs kill -9
$MEMCACHED_ADDR -d -m 256 -u admin -p $MEMCACHED_PORT -c 1024
echo "重启memcached服务成功"

echo "重启redis服务"
ps -ef|grep redis | grep $REDIS_PORT | awk -F " " '{print $2}'|xargs kill -9
$REDIS_ADDR $REDIS_CONF
echo "重启redis服务成功"

echo "启动zookeeper..."
$ZK_SERVER_ADDR restart
echo "启动zookeeper成功..."

echo "更新代码..."
cd $PROJECT_HOME
svn up
echo "更新代码完成..."

echo "清空日志文件"
rm -rf $TOMCAT_HOME/logs/*
echo "清空日志文件完成"

echo "创建uploadFile文件夹及软链..."
#mkdir $LINK_SOURCE_HOME/$PROJECT_PRE"_"uploadFile/uploadFile
ln -s $LINK_SOURCE_HOME/$PROJECT_PRE"_"uploadFile/uploadFile $PROJECT_HOME/$WEB_APP_NAME/target/$WEB_APP_NAME
#ln -s /home/admin/share/yibin_uploadFile/uploadFile /home/admin/project/zongzhi-center/center-web/target/center-web
echo "创建uploadFile文件夹及软链完成..."

echo "启动$APP_NAME服务..."
$PROJECT_HOME/$APP_NAME/$SH_NAME start
$TOMCAT_HOME/bin/startup.sh

##监听端口
isff=1
while [ $isff != 0 ]
do
	##睡眠2秒
	sleep 2
	rs=`netstat -an | grep $TOMCAT_PORT`
	if [ -n "$rs" ];then
		echo "启动$APP_NAME服务成功..."
		isff=0
	else
		echo "启动$APP_NAME服务中..."
	fi
done
  • 在以上脚本中可以看出,主要是指定个个软件(服务)的目录进行启动,通过脚本做到人为的手动处理
  • 启动后还是注意查看系统日志确认,可能出现服务启动起来了,但是系统是错误情况(跳过的坑),查看日志尽量看全看多一点,tail -2000f xxxx 多显示几行,只看最新的几行可能没打印出来,导致以为没问题
  • 注意定义变量实现脚本可维护,不要将可变的东西(如地址)写到脚本里,不好修改(万一环境变化才好处理)和维护。

总结

  • 学习掌握shell脚本可以更好做出自动化发布脚本,能一次性做好的坚决不手动处理
  • 发布后一定要看看启动日志

猜你喜欢

转载自blog.csdn.net/qq_28325291/article/details/84786510