自动化部署,主流方式可能是:用开源的Jenkins。
本质上来讲,Jenkins只是个工具,集成各种各样的打包部署工具,比如集成JDK、Maven、Git,甚至可以维护shell脚本,自动执行。
实现自动化部署,咱们也可以自己写Shell脚本实现,当然是比较简单的那种。
比如,Git clone代码,Maven打包,自动停机,复制war包jar包到指定目录,启动。
如果,还需要执行 构建成功或失败时,自动发送邮件等各种各样的扩展功能(非自动化部署核心流程),那么就需要咱继续写脚本。
需要的功能越多,自己写起来越费劲,最后还不如直接用Jenkins。
这里单独写Shell脚本,就是希望大家能理解Jenkins自动化的本质。
以下是2014年开发P2P网贷项目时,写的Shell脚本,简单实现自动化部署,仅供参考。
#!/bin/sh
echo 'delete git p2p dir'
rm -rf parent
echo 'delete p2p done'
git clone https://git.os.net/leiwen/parent.git
cd parent/
for i in basecenter account-trans-client user-center-client account-center login-center front funds backend
do
git clone https://git.os.net/leiwen/$i
done
mvn install -Dmaven.test.skip=true
简单解读:
先打印提示,删除git目录。
从git上clone parent、basecenter等若干项目。
由于层次结构和分多个git项目的关系,稍微麻烦点,实际项目大多就一个项目,或者分多个模块module;
git clone的过程,会简单许多。
然后在根目录下,执行 mvn install,把所有项目打包,会有jar包 、war包之类的。
#!/bin/sh
path=/var/tomcat/frontTomcat/webapps/
srcPath=/var/local/git-source/parent/
echo $srcPath
echo $path
sh /var/tomcat/frontTomcat/bin/shutdown.sh
if [ $? -eq 0 ];then
echo 'shutdown ok';
fi
rm -rf $path*
echo remove $path*
cp -rf $srcPath/login-center/target/login $path/login
echo 'copy file login.war done'
cp -rf $srcPath/account-center/target/account-center $path/account-center
echo 'copy file account-center.war done'
cp -rf $srcPath/front/target/front $path/ROOT
echo 'copy file front.war done'
cp -rf $srcPath/funds/target/login $path/funds
echo 'copy file funds.war done'
#sh /var/tomcat/frontTomcat/bin/startup.sh
定义各种路径,比如tomcat的部署路径。
先执行tomcat bin目录的shutdown,关停tomcat。
删除目标目录webapps。
复制war包根目录
启动tomcat
-----------------------------
前2篇Jenkins自动化部署里的项目,用的是SpringBoot,用自带的Tomcat运行。
Maven项目,分成了多个模块modules。
Git代码托管在 Gitee上,多了一步增加 公钥的配置。
2014年的P2P项目,代码在内网gitlab上。
2019年,公司代码也在内网gitlab上,直接提供账号和密码就能访问,还是挺方便的。
完整shell脚本大概如下:
# git代码
git clone https://git.com/project.git
#maven打包
mvn install -Dmaven.test.skip=true
# 停止springboot项目
echo "Stopping SpringBoot Application jtn-techplatform-impl.jar"
pid=`ps -ef | grep jtn-techplatform-impl.jar | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
kill -9 $pid
fi
# 复制jar包指定的目录
cp -f /root/.jenkins/workspace/jtn-techplatform/default/techplatform-impl/target/jtn-techplatform-impl.jar /home/app/jtn-techplatform-impl.jar
cd /home/app
#授权
chmod 777 /home/app/jtn-techplatform-impl.jar
# 防止Jenkins执行完成后,杀死所有子进程
BUILD_ID=DONTKILLME
#启动
nohup java -jar jtn-techplatform-impl.jar >techplatform.log 2>&1 &