Shell常用脚本:SpringBoot、Vue项目部署 - 文件夹配置根据自己需求进行修改

x33g5p2x  于2022-02-18 转载在 Shell  
字(7.6k)|赞(0)|评价(0)|浏览(596)
脚本1 - 以前使用

deployment.sh

  1. #!/bin/bash
  2. #
  3. # 注意:
  4. # 1. 需要你安装rsync拷贝工具:yum install rsync
  5. # 2. 需要将Tomcat作为服务,如何设置自行百度,因为我是用的宝塔面板装的Tomcat,它自行帮我作为服务运行了
  6. # 3. deploymentDir、jenkinProjectBaseDir目录是以我的环境默认设置的,如果你也想使用默认,自修修改下面的目录值即可,如果运行脚本没有传参进来,也没按你环境修改下面的默认值,后果自负
  7. #
  8. # 【说明】运行该脚本时可填入的参数
  9. # $1 => projectName[must]: 项目名 = Jenkin任务名称, 部署的jar包名字, 项目名三者跟此参数一致,否则后果自负
  10. # $2 => projectPort[must]: 项目端口号
  11. # $3 => projectPackged[option]: 从仓库拉取的代码是否已经打包好 0未打包[默认值] 1已打包
  12. # $4 => projetType[option]: 项目类型: SpringBoot[默认值]、vue
  13. # $5 => sourceBasePath[option]: 绝对路径, 存放多个项目的目录 == 类似IDEA的workspace目录
  14. # $6 => deploymentDirPath[option]: 绝对路径, 部署多个项目的目录 == 类似Tomcat的webapps目录
  15. echo "当前目录: $(pwd)"
  16. tomcatWebappsDir='/www/server/tomcat8/webapps'
  17. # jenkin所有源码项目目录
  18. jenkinProjectBaseDir='/var/lib/jenkins/workspace'
  19. if [ "$5" ]; then
  20. jenkinProjectBaseDir=$5
  21. fi
  22. # 部署目录
  23. deploymentDir='/www/project'
  24. if [ "$6" ]; then
  25. deploymentDir=$6
  26. elif [ "$4" = 'vue' ]; then
  27. deploymentDir=$tomcatWebappsDir
  28. fi
  29. # 输入参数校验, 必须填入打包后的项目名以及项目部署的端口号
  30. if [ ! "$1" ] || [ ! "$2" ]; then
  31. echo '缺失参数, 正确格式为: sh 脚本绝对路径 项目名 项目端口号'
  32. exit 1
  33. elif [ ! -d "$jenkinProjectBaseDir/$1" ]; then
  34. echo "源码目录不存在: $jenkinProjectBaseDir/$1 , 请检查"
  35. exit 1
  36. else
  37. echo "源码目录存在: $jenkinProjectBaseDir/$1"
  38. fi
  39. # 用于新项目,如果是旧项目更新部署一般都不会执行这块
  40. if [ ! -d "$deploymentDir/$1/backup" ]; then
  41. mkdir -p "$deploymentDir/$1/backup"
  42. fi
  43. if [ ! -f "$deploymentDir/$1/nohup.out" ]; then
  44. touch "$deploymentDir/$1/nohup.out"
  45. fi
  46. # 0. 打包最新的源码项目
  47. # == cd执行不成功直接退出
  48. echo "====打包中 $1:$2===="
  49. cd "$jenkinProjectBaseDir/$1" || exit 1
  50. if [ "$3" != '1' ]; then
  51. if [ "$4" = 'vue' ]; then
  52. npm install
  53. npm run build
  54. else
  55. mvn clean package -Dmaven.test.skip=true -P pro
  56. fi
  57. #else
  58. # rm -rf "${jenkinProjectBaseDir:?'parameter deploymentDir is null, You want to delete the library and run away?'}"/"$1"*
  59. fi
  60. echo "====打包完成 $1:$2===="
  61. sleep 10s
  62. # 1. 定义当前shell文件下面所执行的命令以这个目录为基准(用于相对路径) == cd执行不成功直接退出
  63. cd "$deploymentDir/$1" || exit 1
  64. echo "当前目录: $(pwd)"
  65. # 2. 杀端口为第二个参数的进程
  66. echo "====正在关闭进程 $1:$2===="
  67. if [ "$4" != 'vue' ]; then
  68. projectPID=$(netstat -nlp | grep :"$2" | awk '{print $7}' | awk -F"/" '{ print $1 }')
  69. if [ "$projectPID" ]; then
  70. kill -9 "$projectPID"
  71. fi
  72. else
  73. service tomcat8 stop
  74. fi
  75. echo "====进程关闭完成 $1:$2===="
  76. sleep 1s
  77. # 3. 备份上一个版本的jar包,并从maven拉取最新打包的jar包
  78. echo '====正在备份旧版本===='
  79. # SpringBoot项目
  80. if [ "$4" != 'vue' ]; then
  81. rm -rf ./backup/"$1"*
  82. mv "./$1.jar" "./backup/$1.jar.$(date '+%Y%m%d%H%M%S')"
  83. mv ./nohup.out "./backup/nohup.out.$(date '+%Y%m%d%H%M%S')"
  84. cp "$jenkinProjectBaseDir/$1/target/$1.jar" "$deploymentDir/$1/$1.jar"
  85. touch nohup.out
  86. # Vue项目
  87. else
  88. currentProjectBackupDirName="${1}Backup$(date '+%Y%m%d%H%M%S')"
  89. currentProjectBackupDir="$deploymentDir/$currentProjectBackupDirName"
  90. mkdir "$currentProjectBackupDir"
  91. # 需要安装这个工具:yum install rsync
  92. rsync -r --exclude "${1}Backup*/" ./* "$currentProjectBackupDir"
  93. rm -rf ${deploymentDir:?'parameter deploymentDir is null, You want to delete the library and run away?'}/"$1"/*
  94. if [ "$3" = '1' ]; then
  95. cp -r "$jenkinProjectBaseDir"/"$1"/* "$deploymentDir"/"$1"/
  96. else
  97. cp -r "$jenkinProjectBaseDir"/"$1"/dist/* "$deploymentDir"/"$1"/
  98. fi
  99. mv "$currentProjectBackupDir" "$deploymentDir"/"$1"/
  100. fi
  101. echo '====旧版本备份完成===='
  102. sleep 2s
  103. # 4. 启动项目
  104. echo "====$1:$2 项目部署中===="
  105. if [ "$4" != 'vue' ]; then
  106. nohup java -jar "$1.jar" > nohup.out 2>&1 &
  107. else
  108. service tomcat8 start
  109. fi
  110. echo "====$1:$2 项目部署完成==="
脚本2 - 当前正在使用

脚本1

  1. #!/bin/bash
  2. #
  3. # 注意:
  4. # 1. 需要你安装rsync拷贝工具:yum install rsync
  5. # 2. 需要将Tomcat作为服务,如何设置自行百度,因为我是用的宝塔面板装的Tomcat,它自行帮我作为服务运行了
  6. # 3. deploymentDir、jenkinProjectBaseDir目录是以我的环境默认设置的,如果你也想使用默认,自修修改下面的目录值即可,如果运行脚本没有传参进来,也没按你环境修改下面的默认值,后果自负
  7. #
  8. # 【说明】运行该脚本时可填入的参数
  9. # $1 => projectName[must]: 项目名 = Jenkin任务名称, 部署的jar包名字, 项目名三者跟此参数一致,否则后果自负
  10. # $2 => projectPort[must]: 项目端口号
  11. # $3 => projectPackged[option]: 从仓库拉取的代码是否已经打包好 0未打包[默认值] 1已打包
  12. # $4 => projetType[option]: 项目类型: SpringBoot[默认值]、vue
  13. # $5 => tomcatFlag[option]:是否需要部署到Tomcat中 0不需要(默认) 1需要
  14. # $6 => sourceBasePath[option]: 绝对路径, 存放多个项目的目录 == 类似IDEA的workspace目录
  15. # $7 => deploymentDirPath[option]: 绝对路径, 部署多个项目的目录 == 类似Tomcat的webapps目录
  16. echo "当前目录: $(pwd)"
  17. tomcatWebappsDir='/www/server/tomcat8/webapps'
  18. # jenkin所有源码项目目录
  19. jenkinProjectBaseDir='/var/lib/jenkins/workspace'
  20. if [ "$6" ]; then
  21. jenkinProjectBaseDir=$6
  22. fi
  23. # 部署目录
  24. deploymentDir='/www/project'
  25. if [ "$7" ]; then
  26. deploymentDir=$7
  27. elif [ "$4" = 'vue' ] && [ && "$5" = '1' ]; then
  28. deploymentDir=$tomcatWebappsDir
  29. fi
  30. # 输入参数校验, 必须填入打包后的项目名以及项目部署的端口号
  31. if [ ! "$1" ] || [ ! "$2" ]; then
  32. echo '缺失参数, 正确格式为: sh 脚本绝对路径 项目名 项目端口号'
  33. exit 1
  34. elif [ ! -d "$jenkinProjectBaseDir/$1" ]; then
  35. echo "源码目录不存在: $jenkinProjectBaseDir/$1 , 请检查"
  36. exit 1
  37. else
  38. echo "源码目录存在: $jenkinProjectBaseDir/$1"
  39. fi
  40. # 用于新项目,如果是旧项目更新部署一般都不会执行这块
  41. if [ ! -d "$deploymentDir/$1/backup" ]; then
  42. mkdir -p "$deploymentDir/$1/backup"
  43. fi
  44. if [ ! -f "$deploymentDir/$1/nohup.out" ] && [ "$4" != 'vue' ]; then
  45. touch "$deploymentDir/$1/nohup.out"
  46. fi
  47. # 0. 打包最新的源码项目
  48. # == cd执行不成功直接退出
  49. echo "====打包中 $1:$2===="
  50. cd "$jenkinProjectBaseDir/$1" || exit 1
  51. if [ "$3" != '1' ]; then
  52. if [ "$4" = 'vue' ]; then
  53. npm install
  54. npm run build
  55. else
  56. mvn clean package -Dmaven.test.skip=true -P pro
  57. fi
  58. fi
  59. echo "====打包完成 $1:$2===="
  60. sleep 10s
  61. # 1. 定义当前shell文件下面所执行的命令以这个目录为基准(用于相对路径) == cd执行不成功直接退出
  62. cd "$deploymentDir/$1" || exit 1
  63. echo "当前目录: $(pwd)"
  64. # 2. 杀端口为第二个参数的进程
  65. echo "====正在关闭进程 $1:$2===="
  66. if [ "$4" != 'vue' ]; then
  67. projectPID=$(netstat -nlp | grep :"$2" | awk '{print $7}' | awk -F"/" '{ print $1 }')
  68. if [ "$projectPID" ]; then
  69. kill -9 "$projectPID"
  70. fi
  71. elif [ "$5" = '1' ]; then
  72. service tomcat8 stop
  73. fi
  74. echo "====进程关闭完成 $1:$2===="
  75. sleep 1s
  76. # 3. 备份上一个版本的jar包,并从maven拉取最新打包的jar包
  77. echo '====正在备份旧版本===='
  78. currentProjectBackupDir="/www/project/backup_project"
  79. if [ ! -d "$currentProjectBackupDir" ]; then
  80. mkdir -p $currentProjectBackupDir
  81. fi
  82. dateTime="$(date '+%Y%m%d%H%M%S')"
  83. # SpringBoot项目
  84. if [ "$4" != 'vue' ]; then
  85. # rm -rf ./backup/"$1"*
  86. mv "./$1.jar" "$currentProjectBackupDir/$1.jar.$dateTime"
  87. mv ./nohup.out "$currentProjectBackupDir/$1.nohup.out.$dateTime"
  88. cp "$jenkinProjectBaseDir/$1/target/$1.jar" "$deploymentDir/$1/$1.jar"
  89. touch nohup.out
  90. # Vue项目
  91. else
  92. currentProjectBackupFileName="${1}.$dateTime"
  93. # cd "$deploymentDir"
  94. tar -zcPf "$currentProjectBackupDir/$currentProjectBackupFileName".tar.gz "$deploymentDir/${1}"
  95. # mv "$currentProjectBackupFileName=".tar.gz "$currentProjectBackupDir"
  96. # 需要安装这个工具:yum install rsync
  97. # rsync -r --exclude "${1}Backup*/" ./* "$currentProjectBackupDir"
  98. # rm -rf ${deploymentDir:?'parameter deploymentDir is null, You want to delete the library and run away?'}/"$1"/*
  99. if [ "$3" = '1' ]; then
  100. cp -r "$jenkinProjectBaseDir"/"$1"/* "$deploymentDir"/"$1"/
  101. else
  102. cp -r "$jenkinProjectBaseDir"/"$1"/dist/* "$deploymentDir"/"$1"/
  103. fi
  104. # mv "$currentProjectBackupDir" "$deploymentDir"/"$1"/
  105. # cd "$deploymentDir"/"$1"/
  106. # tar -zcf "$currentProjectBackupDirName".tar.gz "$currentProjectBackupDirName"
  107. # rm -rf "$currentProjectBackupDirName"
  108. fi
  109. echo '====旧版本备份完成===='
  110. sleep 2s
  111. # 4. 启动项目
  112. echo "====$1:$2 项目部署中===="
  113. if [ "$4" != 'vue' ]; then
  114. nohup java -jar "$1.jar" > nohup.out 2>&1 &
  115. elif [ "$5" = '1' ]; then
  116. service tomcat8 start
  117. fi
  118. echo "====$1:$2 项目部署完成==="

相关文章