前面1、2章节分别实现了部署war包到远程tomcat和部署jar包到远程centos。
这章节将借用expect脚本命令来实现部署jar包到远程的centos服务器上。
最终实现的效果其实是和前面第2章节的效果是一样的,注意jenkins服务器上要先安装好expect。

一、创建一个A-build任务,用于统一build生成各个端项目的jar包,如admin工程、web工程等,配置如下:

1、General
image.png
2、源码管理:
image.png
xxxxxx.git项目中包含了各个端的源代码,比如admin端、web端等,如下:
image.png
3、构建管理:
image.png
构建管理命令:

  1. export JAVA_HOME=/usr/local/jdk1.8.0_261
  2. export CLASSPATH=$JAVA_HOME/lib/
  3. export PATH=$PATH:$JAVA_HOME/bin
  4. export PATH=/usr/local/maven-3.6.3/bin:$PATH
  5. mvn clean install -Dmaven.test.skip=true

A-build任务仅是用于统一build生成各个项目端的jar包的,如果整体只有一个项目端的话构建jar包和发布jar包完全可以放在一起操作的,即在构建管理后面直接加入以下操作:

  1. export JAVA_HOME=/usr/local/jdk1.8.0_261
  2. export CLASSPATH=$JAVA_HOME/lib/
  3. export PATH=$PATH:$JAVA_HOME/bin
  4. export PATH=/usr/local/maven-3.6.3/bin:$PATH
  5. mvn clean install -Dmaven.test.skip=true
  6. #假如只有一个web项目端可以直接在build完jar代码后执行传送jar包、重新启动jar包任务
  7. #而不需要将编译jar包任务和发布jar包、重新启动jar包任务分开来操作
  8. #cd /data/web/coinlist-server
  9. #expect replace-coinlist-web.exp
  10. #expect restart-coinlist-web.exp

二、创建各个项目端的发布任务,如admin工程、web工程等,配置如下:

1、General
image.png
2、源码管理,这里可以不用配置git代码了,因为在A-build任务中统一build代码生成jar包了。
image.png
3、构建管理:
这里用expect执行传送jar和启动jar脚本。
image.png
构建管理命令:

  1. cd /data/web/coinlist-server
  2. expect replace-coinlist-web.exp
  3. expect restart-coinlist-web.exp

4、重复第二步,为各个项目创建发布任务,最终如下:
image.png
5、项目发布,比如要发布admin,先将代码提交到git,然后执行a-build任务编译jar,然后再执行admin任务即可,在admin任务中会把jar传送到远程centos服务器上并重新启动jar。

三、脚本

1、jekins服务器上replace-coinlist-web.exp脚本
将jar包从jekins服务器上传到指定的远程centos服务器上

  1. #!/usr/bin/expect
  2. set timeout 10000
  3. set password "admin123"
  4. set yesno "yes"
  5. spawn ssh -p 22 -o StrictHostKeyChecking=no centos@172.xx.xx.xx
  6. expect {
  7. "*es/no)?*" {send "$yesno\n";exp_continue}
  8. "*assword:" {send "$password\n"}
  9. }
  10. #expect "*assword:"
  11. #send "$password\n"
  12. 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/
  13. expect {
  14. "*es/no)?*" {send "$yesno\n";exp_continue}
  15. "*assword:" {send "$password\n"}
  16. }
  17. #expect "*es/no)?*"
  18. #send "$yesno\n"
  19. #expect "*assword:"
  20. #send "$password\n"
  21. expect eof
  22. #interact

2、jekins服务器上restart-coinlist-web.exp脚本
用expect脚本命令执行远程centos服务器上的sh脚本

  1. #!/usr/bin/expect
  2. set timeout 10000
  3. set password "admin123"
  4. set yesno "yes"
  5. #spawn ssh -p 22 centos@39.xx.xx.xx
  6. spawn ssh -p 22 centos@172.xx.xx.xx
  7. expect {
  8. "*es/no)?*" {send "$yesno\n";exp_continue}
  9. "*assword:" {send "$password\n"}
  10. }
  11. #expect "*es/no)?*"
  12. #send "$yesno\n"
  13. #expect "*assword:"
  14. #send "$password\n"
  15. expect "]*"
  16. send "cd /data/web/coinlist-server/coinlist-web\n"
  17. expect "]*"
  18. send "sh stop.sh\n"
  19. expect "]*"
  20. send "sh start.sh\n"
  21. #expect "stdout"
  22. #send "\n"
  23. expect "]*"
  24. send "tail -f web.log\n"
  25. #expect eof
  26. interact

3、远程centos服务器上停止jar脚本

  1. echo "Stopping SpringBoot Application coinlist web"
  2. pid=`ps -ef | grep coinList-web.jar | grep -v grep | awk '{print $2}'`
  3. if [ -n "$pid" ]
  4. then
  5. kill -9 $pid
  6. fi

4、远程centos服务器上启动jar脚本

  1. source ../init.sh
  2. BUILD_ID=dontKillMe nohup java -jar -Xms512m -Xmx1024m coinList-web.jar -> web.log &
  3. tail -f web.log