一.应用场景:
本地开发java应用程序,当部署时,要打包java应用,上传jar包到远程服务器,登录远程服务器并执行指令进行重启java服务。
有时候需要频繁反复进行该操作,每次都这样一步一步的做,有些繁琐并且浪费时间,因此写了一份shell脚本,只需要执行一个脚本指令,便自动做了上述所有的事情,节省了许多事。
二.环境
1.springboot的应用,java -jar跑服务,linux服务器使用账号密码登录(使用私钥等只需要修改对应的scp,ssh命令即可)
2.shell脚本,需要shell运行环境支持。mac下默认支持,windows需要使用powershell,区别于cmd,该程序支持shell脚本运行。当使用密钥时,需要修改id_rsa文件的读写权限,设置为当前用户权限就好,具体百度即可。
三.思路
重现步骤,第一步,mvn打包java应用,第二步,上传jar包和对应的配置文件到服务器,第三步,登录服务器,执行部署脚本
四.实现
1.首先新建打包脚本 package.sh
#!/bin/bash
mvn clean package -Dmaven.test.skip=true
该脚本进行打包指令,需要依赖maven环境,具体需要配置MAVEN_HOME还有PATH,也不多说了
2.写好上传服务器脚本 scp.sh
#! /usr/bin/expect
#目标服务器ip,接收第一个参数
set target_ip [lindex $argv 0]
#目标服务器端口,接收第二个参数
set target_port [lindex $argv 1]
#目标服务器用户名,接收第三个参数
set scpUser [lindex $argv 2]
#目标服务器密码,接收第四个参数
set scpPwd [lindex $argv 3]
#传输到目标服务器的路径
set target_path [lindex $argv 4]
#打印接收到的参数
for {set i 0} {$i < $argc} {incr i} {
#打印参数
puts "arg $i: [lindex $argv $i]"
}
#从第六个参数开始,作为发送的文件参数,通配符时,会把匹配到的所有文件依次传进
for {set i 5} {$i < $argc} {incr i} {
#scp指令 -P是端口,默认ssh端口是22, -r是发送的文件路径, :后面是目标地址,如果使用私钥,可以用 scp -i xxx/id_rsa -P ,把-i放在最前面
spawn scp -P $target_port -r [lindex $argv $i] $scpUser@$target_ip:$target_path
#使用expect的功能