分布式项目打包、传输、自动启动
背景
单位目前使用springcloud框架,有十多个项目并且每个项目有多个结点,每次测试环境、线上环境部署的时候都得本地打包传输到线上,这样会很浪费时间。所以个人写了套脚本直接在线上更新代码、项目打包、scp传输jar包、自动启动项目。
准备工作
- 我的管理代码工具为git,首先我们需要在linux下安装git,在项目中定义自己的线上分支 如:pro分支,创建文件夹执行git clone命令将代码克隆下来。
- 安装maven并且配置环境变量
开始脚本
- 更新代码
编辑脚本
vim git.sh
脚本内容
printf "==========================================进入项目==========================================\n"
cd /home/mipmci/git/sxmpx
printf "==========================================正在更新==========================================\n"
git pull
printf "==========================================更新成功==========================================\n"
- 打包
编辑脚本
vim mvn.sh
脚本内容
printf "==========================================进入项目目录==========================================\n"
cd /home/mipmci/git/sxmpx
printf "==========================================开始打包servic项目==========================================\n"
mvn clean package -DskipTests
printf "==========================================servic项目打包成功==========================================\n"
cd /home/mipmci/git/sxmpx/sxmpx-admin
printf "==========================================开始打包admin项目==========================================\n"
mvn clean package -DskipTests
printf "==========================================admin项目打包成功==========================================\n"
- 单个项目实现方法
编辑脚本
vim up_service_user.sh
脚本内容
#删除将要启动的jar
rm -rf /home/mipmci/java/sxmpx-service-user-0.0.1-SNAPSHOT.jar
#通过scp将打包好的jar包拷贝到当前服务器的指定路径
expect -c "
spawn scp -r root@192.168.0.159:/home/mipmci/git/sxmpx/service/sxmpx-service-user/target/sxmpx-service-user-0.0.1-SNAPSHOT.jar /home/mipmci/java
expect {
\"*assword\"
{
set timeout 300;
send \"Mip@mcI7031305\r\";
}
\"yes/no\"
{
send \"yes\r\"; exp_continue;}
}
expect eof"
#查找服务ID并且杀死服务
ps -ef|grep sxmpx-service-user-0.0.1-SNAPSHOT.jar | grep -v grep |awk '{print $2}' | xargs kill -9
#启动服务
java -jar /home/mipmci/java/sxmpx-service-user-0.0.1-SNAPSHOT.jar &
其他项目启动以此类推
- 最后我们可以将这些多个不同的单个项目启动脚本结合起来
编辑脚本
vim up_service_all.sh
脚本内容
#user项目启动脚本
start_user_service ()
{
sh /home/mipmci/java/up_start/up_service_user.sh
}
#git更新项目脚本
start_git ()
{
sh /home/mipmci/java/up_start/git.sh
}
#mvn打包脚本
start_mvn ()
{
sh /home/mipmci/java/up_start/mvn.sh
}
read -p "是否需要更新项目 ?(Y/N) >>>: " git
case $git in
Y)
start_git;;
esac
read -p "是否需要重新打包项目 (Y/N) >>>: " mvn
case $mvn in
Y)
start_mvn;;
esac
#请输入想要启动的项目名称
read -p "Please input your product started >>>: " product
echo $product
#判断输入的项目名称并且调起启动脚本
case $product in
user)
start_user_service ;;
pay)
start_pay_service ;;
*)
echo "-----------------------------------未找到您要启动的项目----------------------------------";;
esac
- 使用案例
说明已经打包成功
输入启动项目的名称即可