前面1、2章节分别实现了部署war包到远程tomcat和部署jar包到远程centos。
这章节将借用expect脚本命令来实现部署jar包到远程的centos服务器上。
最终实现的效果其实是和前面第2章节的效果是一样的,注意jenkins服务器上要先安装好expect。
一、创建一个A-build任务,用于统一build生成各个端项目的jar包,如admin工程、web工程等,配置如下:
1、General
2、源码管理:
xxxxxx.git项目中包含了各个端的源代码,比如admin端、web端等,如下:
3、构建管理:
构建管理命令:
export JAVA_HOME=/usr/local/jdk1.8.0_261export CLASSPATH=$JAVA_HOME/lib/export PATH=$PATH:$JAVA_HOME/binexport PATH=/usr/local/maven-3.6.3/bin:$PATHmvn clean install -Dmaven.test.skip=true
A-build任务仅是用于统一build生成各个项目端的jar包的,如果整体只有一个项目端的话构建jar包和发布jar包完全可以放在一起操作的,即在构建管理后面直接加入以下操作:
export JAVA_HOME=/usr/local/jdk1.8.0_261export CLASSPATH=$JAVA_HOME/lib/export PATH=$PATH:$JAVA_HOME/binexport PATH=/usr/local/maven-3.6.3/bin:$PATHmvn clean install -Dmaven.test.skip=true#假如只有一个web项目端可以直接在build完jar代码后执行传送jar包、重新启动jar包任务#而不需要将编译jar包任务和发布jar包、重新启动jar包任务分开来操作#cd /data/web/coinlist-server#expect replace-coinlist-web.exp#expect restart-coinlist-web.exp
二、创建各个项目端的发布任务,如admin工程、web工程等,配置如下:
1、General
2、源码管理,这里可以不用配置git代码了,因为在A-build任务中统一build代码生成jar包了。
3、构建管理:
这里用expect执行传送jar和启动jar脚本。
构建管理命令:
cd /data/web/coinlist-serverexpect replace-coinlist-web.expexpect restart-coinlist-web.exp
4、重复第二步,为各个项目创建发布任务,最终如下:
5、项目发布,比如要发布admin,先将代码提交到git,然后执行a-build任务编译jar,然后再执行admin任务即可,在admin任务中会把jar传送到远程centos服务器上并重新启动jar。
三、脚本
1、jekins服务器上replace-coinlist-web.exp脚本
将jar包从jekins服务器上传到指定的远程centos服务器上
#!/usr/bin/expectset timeout 10000set password "admin123"set yesno "yes"spawn ssh -p 22 -o StrictHostKeyChecking=no centos@172.xx.xx.xxexpect {"*es/no)?*" {send "$yesno\n";exp_continue}"*assword:" {send "$password\n"}}#expect "*assword:"#send "$password\n"spawn scp -r /data/jenkins/jenkins_data/workspace/coinlist-A-build/coinList-web/target/coinList-web.jar centos@172.xx.xx.xx:/data/web/coinlist-server/coinlist-web/expect {"*es/no)?*" {send "$yesno\n";exp_continue}"*assword:" {send "$password\n"}}#expect "*es/no)?*"#send "$yesno\n"#expect "*assword:"#send "$password\n"expect eof#interact
2、jekins服务器上restart-coinlist-web.exp脚本
用expect脚本命令执行远程centos服务器上的sh脚本
#!/usr/bin/expectset timeout 10000set password "admin123"set yesno "yes"#spawn ssh -p 22 centos@39.xx.xx.xxspawn ssh -p 22 centos@172.xx.xx.xxexpect {"*es/no)?*" {send "$yesno\n";exp_continue}"*assword:" {send "$password\n"}}#expect "*es/no)?*"#send "$yesno\n"#expect "*assword:"#send "$password\n"expect "]*"send "cd /data/web/coinlist-server/coinlist-web\n"expect "]*"send "sh stop.sh\n"expect "]*"send "sh start.sh\n"#expect "stdout"#send "\n"expect "]*"send "tail -f web.log\n"#expect eofinteract
3、远程centos服务器上停止jar脚本
echo "Stopping SpringBoot Application coinlist web"pid=`ps -ef | grep coinList-web.jar | grep -v grep | awk '{print $2}'`if [ -n "$pid" ]thenkill -9 $pidfi
4、远程centos服务器上启动jar脚本
source ../init.shBUILD_ID=dontKillMe nohup java -jar -Xms512m -Xmx1024m coinList-web.jar -> web.log &tail -f web.log
