前话

在本地开发环境中对项目进行修改操作后 , 部署到服务器上非常麻烦
平时我们更新项目的步骤 :

  1. 更新maven库
  2. 导出项目war
  3. 解压项目war
  4. 上传修改的内容
  5. 重启服务器

可以说是非常麻烦.

原理

当我们进行团队开发 , 对代码有改动后 ,一般都是使用git提交到git仓库.那么就可以使用git拉取代码到服务器上, 使用maven对项目的编译

实现

#!/bin/sh
#存放git拉取下来的项目
projectsPath=/home/concise/deploy/projects
#存放备份的项目
backupPath=/home/concise/deploy/backup
#项目的运行目录(tomcat)
webapps=/webapps
#项目的配置文件存放目录
configPath=/home/concise/deploy/config
#maven编译打包后存放的目录
tarsPath=/home/concise/deploy/tars
#获取当前系统时间.用于备份文件夹命名
currentTime=`date +%Y%m%d-%H%M%S`

echo " -- > 项目更新操作开始"

echo "    -- > 正在清理备份原有项目"

if [ "`ls -A $webapps`" = "" ]; then
  echo "  -- > $webapps 中没有项目"
else

  echo "    -- > 创建本次操作的备份目录 $backupPath/$currentTime"

  #创建备份文件夹
  mkdir $backupPath/$currentTime

  echo "     -- > 进入webapps目录 $webapps"
  cd $webapps
  for file in ./*
    do
        echo "        -- > 备份 $file  "
        tar -zcf $file.tar.gz $file

        echo "            -- > 移动项目 $file 到备份目录 "
        mv $file.tar.gz $backupPath/$currentTime
        echo "            -- > 删除 $file "
        rm -rf $file
    done
fi


echo "     -- > 同步git仓库 "
#进入到拉取项目的目录
cd $projectsPath
#遍历里面的每一个项目,并进去拉取更新项目
for file in ./*
  do
      cd $file && git pull origin && git checkout develop
    cd ../
  done

echo "        -- > 同步git仓库完成 "

echo "        -- > 正在进行maven编译打包 "

cd $projectsPath
#遍历所有项目并编译打包
for file in ./*
do
    echo "        -- > 编译打包 $file "
    #进入单个项目文件夹 && 强制更新并编译 && 进入target目录 && 打包项目  && 复制打包的项目到 专门存放项目tar的目录 && 回到项目存放目录
    cd $file && mvn clean compile package -U && cd target && tar -zcf $file.tar.gz $file && cp $file.tar.gz $tarsPath && cd ../../
done
#剪切tars目录下所有打包好的项目到webapps下面
mv $tarsPath/* $webapps/

cd $webapps

echo "    -- > 解压所有项目tar"
#遍历所有项目并解压.完成后删除原有tar包
for file in ./*
do
    if [ "`ls -A $webapps`" != "" ]; then
        tar -zxf $file
        rm -rf $file
    fi
done

echo "    -- > 更新所有项目config"

#复制配置文件过来覆盖现有内容
cp -rf $configPath/* $webapps/

实现起来并不难 , 我不太会shell脚本 , 这些都是linux的基本命令.
就不给下载地址了 , 上面的代码是完整的.复制就行.需要按照自己的使用修改.