前面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_261
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export PATH=/usr/local/maven-3.6.3/bin:$PATH
mvn clean install -Dmaven.test.skip=true
A-build任务仅是用于统一build生成各个项目端的jar包的,如果整体只有一个项目端的话构建jar包和发布jar包完全可以放在一起操作的,即在构建管理后面直接加入以下操作:
export JAVA_HOME=/usr/local/jdk1.8.0_261
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export PATH=/usr/local/maven-3.6.3/bin:$PATH
mvn 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-server
expect replace-coinlist-web.exp
expect 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/expect
set timeout 10000
set password "admin123"
set yesno "yes"
spawn ssh -p 22 -o StrictHostKeyChecking=no centos@172.xx.xx.xx
expect {
"*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/expect
set timeout 10000
set password "admin123"
set yesno "yes"
#spawn ssh -p 22 centos@39.xx.xx.xx
spawn ssh -p 22 centos@172.xx.xx.xx
expect {
"*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 eof
interact
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" ]
then
kill -9 $pid
fi
4、远程centos服务器上启动jar脚本
source ../init.sh
BUILD_ID=dontKillMe nohup java -jar -Xms512m -Xmx1024m coinList-web.jar -> web.log &
tail -f web.log