半自动部署脚本

140 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

#git仓库项目的名称、docker-compose.yml 里面image和container的名称要求一样
project_name_service_name_container_name=usercenter

#你最终要部署的sdk的war的名称,不加版本号
sdk_name=usercenter-web

#项目的lab地址,基于https的话要在地址中加入用户名和密码信息
project_repository=

#你需要拉取的源码版本,符合git版本,默认不传参获取最新版本,也可以传特定的版本用于版本回退
#比如传^ 回退一个版本,^^回退两个版本 ^^^回退三个版本  versionid 回退到versionid这个版本
pull_version=$1

function pull () {
  
  if [ ! -d gitlab ]; then 
    mkdir gitlab 
  fi
  cd gitlab

  if [ ! -d "$project_name_service_name_container_name" ]; then
    git clone $project_repository
    echo -e  "\n\nclone success!\n\n"
  cd .. 

  else
    cd $project_name_service_name_container_name
    if [  -n "$pull_version" ]; then
      #回退
      if [[ $pull_version == "rollback"  || $pull_version == "rbk" || $pull_version == "rb" ]]; then 
        git reset --hard HEAD^
 
      else
        git reset --hard $pull_version

      fi
      echo -e "\n\nreset success!\n\n"

    else
      git pull
      echo -e "\n\npull success!\n\n"

    fi

    cd ../..

  fi
  echo "current path " pwd
}




function package () {
  cd gitlab/$project_name_service_name_container_name
  mvn package "-Dmaven.skip.test=true -e -U"
  sdk_packaged_name=${sdk_name}*.war
  cp  $sdk_name/target/*.war  ../../web/$project_name_service_name_container_name/"$project_name_service_name_container_name".war
  rm -rf ./*/target
  echo "package success!"
  cd ../..
  echo "current path "  pwd
}


function start () {
  orignal_started_container=docker ps |grep $project_name_service_name_container_name
  original_stoped_container=docker ps -a |grep $project_name_service_name_container_name

  if [ -n "$orignal_started_container"  ]; then
      docker stop $project_name_service_name_container_name
  fi
  if [ -n "$original_stoped_container" ]; then
      docker rm $project_name_service_name_container_name
  fi

  docker-compose build $project_name_service_name_container_name

  docker-compose create $project_name_service_name_container_name

  docker-compose start $project_name_service_name_container_name

  echo -e "\n\n##################Application Log#######################\n\n"
  docker logs -f $project_name_service_name_container_name
}

pull
package 
start

脚本说明

这个脚本每个app应该有一个脚本,命名可以用deploy_appname的形式,但是不要求 运行脚本需要满足以下:

project_name_service_name_container_name=填写你的docker-compose.yml中的containe_name
sdk_name=填写sdk构建名称,不需要加版本信息 例如我的项目sdk构建名称就是项目的web模块的名称:xxx-web
project_repository=填写你项目的git地址,推荐ssh地址,https的话记得加上你的用户名和密码信息