自动化部署,主流方式可能是:用开源的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 &