ITPub博客

首页 > 数据库 > 数据库开发技术 > Jenkins结合shell+expect脚本完成线上环境自动构建部署

Jenkins结合shell+expect脚本完成线上环境自动构建部署

原创 数据库开发技术 作者:MavenTalk 时间:2016-11-11 20:14:51 0 删除 编辑


        如果jenkins部署在内网,而生产环境存在DMZ区的话,此方式就不太适合了,需要考虑其它方式来部署升级。


        由于jenkins部署在内网,生产环境在公网,所以中间需要一个安装包转移的过程,将内网的安装包copy到远程公网对应位置,可采用scp命令,同样也可以采用上传到远程服务器,在公网服务器上get下来,笔者采用是scp的方式。


        采用scp存在一个问题,此命令会与人产生交互,无法在shell中自动完成,此时需要借助另外一个工具expect(Tcl语言的另一个衍生版),上篇文章已经介绍到【如何编写无须人工干预的shell脚本】


脚本如下:

#!/usr/local/bin/expect

set timeout 30

set password xxxxxx

spawn scp -P 10010 /usr/local/src/portal.war root@218.76.43.83:/home/server/apache-tomcat-7.0.70/webapps

 expect {

 "(yes/no)?"

  {

  send "yes\n"

  expect "*assword:" { send "$password\n"}

 }

 "*assword:"

{

 send "$password\n"

}

}

expect "100%"

expect eof

spawn ssh -l root 118.36.23.113 -p 10000 #远程登陆

expect "*assword:" { send "$password\n"}

expect "*#"

send "echo get into directory\r"

expect "*#"

send "cd /home/shell\r"#存放脚本的目录

expect "*#"

send "sh server-restart.sh \r" #远程的启动脚本

expect "*#"

#send "exit\r" -- 希望执行完sh脚本,退出远程服务。这么做导致war包部署时异常,这里要注释掉,统一交由jenkins的job来终结

expect "100%"

expect eof

interact


server-restart.sh脚本内部就如之前一篇《利用jenkins实现自动构建、部署,提升团队开发效率》中有提到,内容类似,这里不再赘述。


传送门:

1、如何编写无须人工干预的shell脚本

2、Jenkins构建部署后,服务无法在后台持续运行的解决方案


歪脖贰点零 ∣一个十年码农的日常碎碎念
长按,识别二维码,加关注,获取更多精彩内容

原文作者:MavenTalk;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2016-07-13

  • 博文量
    461
  • 访问量
    189214