免密钥一键部署脚本

免密钥一键发布脚本

开发环境没有jenkins等CI/CD工具,又不想或者没有资源搭建,就采用本地构建打包推到远程

1.本地打包

以windows环境,springboot单体项目为例,其他语言或者springcloud多模块项目根据需要修改

git拉取最新代码 --git-dir .git文件夹所在的位置,一般是项目根目录,--work-tree当前工作目录,也用项目根目录就好

git --git-dir=.git --work-tree=./ pull

springboot项目用maven打包

mvn clean package -DskipTests
2.远程执行命令

由于ssh或scp都采用交互式的密码验证方式,不能通过参数输入密码

为了省去输入密码的过程,可以选择配置密钥 免密登录,免密登录配置可以参考文章

这里主要讲述另一种方式,通过参数的方式验证密码

linux或mac,可以安装使用sshpass

sshpass -p '你的密码' ssh 用户名@主机名 -c 你想要远程执行命令
sshpass -p '你的密码' scp 本地文件路径 用户名@主机名:远程文件路径

windows这里推荐一个跨平台的sshpass,是通过java实现的sshpass,觉得好用可以点个star

这里给的是一个jar包,有需要也可以根据平台打成二进制的可执行文件或exe

java -jar sshpass.jar -h 远程地址 -u 登录用户名 -p 登录密码 -c 你想要执行的命令
java -jar sshpass.jar -h 远程地址 -u 登录用户名 -p 登录密码 --scp 本地文件路径 远程文件路径
3.远程推送发布

具体流程根据实际修改

把远程的包根据时间日期备份一下

java -jar ../sshpass.jar -h %remote_host% -u %remote_host_user% -p %remote_host_passwd% -c "cp %deploy_dir%/start.jar %deploy_dir%/backup/start-$(date +%%Y%%m%%d%%H%%M%%S).jar -f"

把本地包scp到远程

java -jar ../sshpass.jar -h %remote_host% -u %remote_host_user% -p %remote_host_passwd% --scp -i target/start.jar -o %deploy_dir%

重启项目

java -jar ../sshpass.jar -h %remote_host% -u %remote_host_user% -p %remote_host_passwd% -c "cd %deploy_dir% && sh shutdown.sh"
java -jar ../sshpass.jar -h %remote_host% -u %remote_host_user% -p %remote_host_passwd% -c "cd %deploy_dir% && sh startup.sh"
4.完整

下面是我一个实际项目的案例,用的是windows开发,所以是一个cmd脚本

这里是一个多服务项目,根据不同的参数选择发布不同的包

if "%1"=="" goto :eof
set project=""

if "%1" EQU "service1" set project="%1"
if "%1" EQU "service2" set project="%1"
if "%1" EQU "service3" set project="%1"
if %project% EQU "" goto :eof

git --git-dir=../framework-parent/.git --work-tree=../framework-parent pull

git --git-dir=../service1/.git --work-tree=../service1 pull
git --git-dir=../service2/.git --work-tree=../service2 pull
git --git-dir=../service3/.git --work-tree=../service3 pull

set deploy_dir=/opt/backend/%project%
call mvn -f ../framework-parent/pom.xml clean install -DskipTests
@echo on
call mvn clean package -DskipTests
@echo on

set remote_host=xxx.xxx.xxx.xxx
set remote_host_user=root
set remote_host_passwd=xxxxxxxxx

java -jar ../sshpass.jar -h %remote_host% -u %remote_host_user% -p %remote_host_passwd% -c "cp %deploy_dir%/start.jar %deploy_dir%/backup/start-$(date +%%Y%%m%%d%%H%%M%%S).jar -f"
java -jar ../sshpass.jar -h %remote_host% -u %remote_host_user% -p %remote_host_passwd% --scp -i start/target/start.jar -o %deploy_dir%
java -jar ../sshpass.jar -h %remote_host% -u %remote_host_user% -p %remote_host_passwd% -c "cd %deploy_dir% && sh shutdown.sh"
java -jar ../sshpass.jar -h %remote_host% -u %remote_host_user% -p %remote_host_passwd% -c "cd %deploy_dir% && sh startup.sh"

java -jar ../sshpass.jar -h %remote_host% -u %remote_host_user% -p %remote_host_passwd% -c "ps -ef | grep java"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

climb.xu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值