@(编程)

最近写了一个自动部署的脚本,可以一键部署到测试服务器或者生产服务器上,包括一个函数脚本和一个调用脚本,比较简单,记录如下。

特点如下:

  • 部署前自动备份
  • 可以部署tomcat项目和java项目
  • 支持参数,可以部署测试环境和生产环境

function.sh

  1. #!/bin/bash
  2. ##author:zch
  3. ##date:20171116
  4. host=192.168.163.50
  5. if [ "$1"x = "online"x ]; then
  6. host=111.111.111.111
  7. echo "host is 111.111.111.111"
  8. else
  9. host=192.168.163.50
  10. echo "host is 192.168.163.50"
  11. fi
  12. ##远程调用,传入参数
  13. remote_call(){
  14. ssh -tt hhtd@$host << remotessh
  15. $1
  16. exit
  17. remotessh
  18. }
  19. ##更新、编译代码,参数是名称,如admin或者app_server
  20. build_code(){
  21. git checkout $1_online
  22. git pull
  23. mvn clean install dependency:copy-dependencies
  24. echo "build code success"
  25. }
  26. ##启动远程tomcat,参数是名称,如admin或者app_server
  27. start_remote_process(){
  28. remote_call "/home/hhtd/bin/start_$1.sh"
  29. }
  30. ##杀掉远程tomcat,参数是名称,如admin或者app_server
  31. kill_remote_process(){
  32. remote_call "/home/hhtd/bin/kill_$1.sh"
  33. }
  34. ##备份远程tomcat,参数是名称,如admin或者app_server
  35. backup_remote(){
  36. remote_call "/home/hhtd/bin/backup_$1.sh"
  37. }
  38. ##删除远程tomcat日志,参数是全路径,如/home/hhtd/online/admin-tomcat-8082/
  39. rm_tomcat_logs(){
  40. remote_call "rm -rf $1/logs/*.*"
  41. }
  42. ##删除远程的release目录下的root,参数是名称,如admin或者app_server
  43. rm_remote_release_root(){
  44. remote_call "rm -rf /home/hhtd/release/hhtd_$1/ROOT"
  45. }
  46. ##把本地ROOT复制到远程release目录下,参数是名称,如admin或者app_server
  47. scp_root_remote(){
  48. scp -r ./hhtd_$1/target/ROOT hhtd@$host:/home/hhtd/release/hhtd_$1/ROOT
  49. }
  50. ##把本地文件复制到远程,适用于非web项目,包括两个参数,第一个是名称,第二个是全路径
  51. scp_release_remote(){
  52. remote_call "mkdir $2"
  53. remote_call "mkdir $2/bin"
  54. remote_call "mkdir $2/lib"
  55. remote_call "mkdir $2/config"
  56. remote_call "mkdir $2/logs"
  57. scp -r ./release/hhtd_$1/bin/*.* hhtd@$host:$2/bin/
  58. scp -r ./release/hhtd_$1/lib/*.* hhtd@$host:$2/lib/
  59. }
  60. ##删除远程服务器上的tomcat下的root,参数是全路径,如/home/hhtd/online/admin-tomcat-8082/
  61. rm_tomcat_root(){
  62. remote_call "rm -rf $1/webapps/ROOT"
  63. }
  64. ##备份远程服务器上tomcat下面的attach(attache)文件夹,参数是全路径,如/home/hhtd/online/admin-tomcat-8082/
  65. backup_tomcat_attach(){
  66. remote_call "mv $1/webapps/ROOT/attache $1/webapps/attache"
  67. }
  68. ##把release目录下的root复制到online目录下,包括两个参数,第一个是名称,第二个是全路径
  69. cp_tomcat_release_online(){
  70. remote_call "cp -R /home/hhtd/release/hhtd_$1/ROOT $2/webapps/ROOT"
  71. }
  72. ##把备份的tomcat下的attach目录恢复回去
  73. recover_tomcat_attach(){
  74. remote_call "mv $1/webapps/attache $1/webapps/ROOT/attache"
  75. }
  76. ##备份tomcat配置文件,参数是全路径,如/home/hhtd/online/admin-tomcat-8082/
  77. backup_tomcat_config(){
  78. remote_call "cp $1/webapps/ROOT/WEB-INF/classes/ $1/*.properties "
  79. }
  80. ##把配置文件复制回去,参数是全路径,如/home/hhtd/online/admin-tomcat-8082/
  81. recover_tomcat_config(){
  82. remote_call "cp $1/*.properties $1/webapps/ROOT/WEB-INF/classes/"
  83. }
  84. ##复制依赖jar文件到release目录
  85. copy_dependencies_jar(){
  86. rm -f ./release/hhtd_$1/lib/*.jar
  87. cp ./hhtd_$1/target/dependency/*.jar ./release/hhtd_$1/lib/
  88. cp ./hhtd_$1/target/*hhtd_$1*.jar ./release/hhtd_$1/lib/
  89. }
  90. ##给sh执行权限,参数是名称,适用于非web项目
  91. chmod_x(){
  92. remote_call "chmod +x /home/hhtd/online/hhtd_$1/bin/start.sh"
  93. }
  94. ##适用于非web项目,参数是名称
  95. backup_remote_config(){
  96. remote_call "rm -rf /home/hhtd/tmp/"
  97. remote_call "mkdir /home/hhtd/tmp/"
  98. remote_call "cp /home/hhtd/online/hhtd_$1/config/*.* /home/hhtd/tmp/"
  99. }
  100. ##适用于非web项目,参数是路径
  101. rm_remote_folder(){
  102. remote_call "rm -rf $1"
  103. }
  104. ##适用于非web项目,参数是路径
  105. recover_config(){
  106. remote_call "cp /home/hhtd/tmp/*.* $1/config/"
  107. }
  108. ##适用于web项目,参数是路径
  109. rm_tomcat_config(){
  110. remote_call "rm $1/webapps/ROOT/WEB-INF/classes/*.properties"
  111. }

admin.sh

  1. #!/bin/bash
  2. ##author:zch
  3. ##date:20171116
  4. time1=`date +"%s"`
  5. name=admin
  6. folder=admin-tomcat-8082
  7. fullPath=/home/hhtd/online/$folder
  8. source function.sh
  9. ## build source code
  10. build_code $name
  11. ## remote rm files scp to online
  12. rm_remote_release_root $name
  13. scp_root_remote $name
  14. ##kill tomcat
  15. kill_remote_process $name
  16. ## backup tomcat
  17. backup_remote $name
  18. ## rm tomcat logs
  19. rm_tomcat_logs $fullPath
  20. ##rm ROOT
  21. backup_tomcat_attach $fullPath
  22. rm_tomcat_root $fullPath
  23. echo "root deleted"
  24. ##cp ROOT
  25. cp_tomcat_release_online $name $fullPath
  26. recover_tomcat_attach $fullPath
  27. echo "cp root finished"
  28. ##rm tomcat config
  29. rm_tomcat_config $fullPath
  30. ##cp config
  31. recover_tomcat_config $fullPath
  32. ##start tomcat
  33. start_remote_process $name
  34. time2=`date +"%s"`
  35. ((total=$time2-$time1))
  36. echo "deploy finished total time is "$total seconds

应用maven自动部署的脚本的更多相关文章

  1. 使用Maven自动部署Tomcat 6和Tomcat 7下Web应用

    使用Maven自动部署Tomcat 6和Tomcat 7下Web应用 开启Tomcat远程管理权限 在tomcat的config目录下的tomcat-users.xml文件, <role rol ...

  2. maven自动部署到tomcat的问题

    最近需要使用Maven将项目自动部署到Tomcat,在网络上也查找了很多文章,内容大同小异,今天打算在这里给自己做一个小总结 参考网址:http://blog.csdn.net/dilaomimi/a ...

  3. maven自动部署项目以及常见问题解决

    Maven自动部署war到Tomcat1. 在maven项目的pom里配置如下信息 <build> <finalName>dianxiao</finalName> ...

  4. 自动部署tomcat 脚本

    自动部署tomcat 脚本 . /etc/init.d/functions #调用系统函数 yum -y install java >/dev/null TAR="apache-tom ...

  5. nginx tomcat 自动部署python脚本【转】

    #!/usr/bin/env python #--coding:utf8-- import sys,subprocess,os,datetime,paramiko,re local_path='/ho ...

  6. 关于maven自动部署tomcat9 步骤

    maven 自动部署tomcat9 (远程方法) 1.首先要去配置用户,在tomcat的conf中有tomcat_users.xml,在其中有tomcat-user的配置 配置:<tommcat ...

  7. 使用Maven自动部署Java Web应用到Tomcat服务器

    学习如何使用Maven,我推荐一本工具书,<maven the definitive guide>.在这本工具书手中,详细介绍了maven的使用思想,并且提供了从基本到复杂的具体项目应用. ...

  8. maven自动部署到远程tomcat教程

    使用maven的自动部署功能可以很方便的将maven工程自动部署到远程tomcat服务器,节省了大量时间. 本文章适用于tomcat的7.x ,8.x, 9.x版本. 下面是自动部的步骤 1,首先,配 ...

  9. Maven 自动部署

    自动部署到Tomcat Maven 3.2.5 JDK 1.7 Tomcat 7 首先在Tomcat里配置deploy的用户(tomcat根目录/conf/tomcat-users.xml): < ...

随机推荐

  1. 在PHP中,是以分好结束一条语句的吗

    在PHP中,是以分号结束一条语句的,这个和C语言类似. 但是,有一条例外,对于PHP结束tag之前的语句,是可以不写分号的: <?php if ($a == $b) { echo "R ...

  2. 互评Alpha版本 - Hello World团队项目空天猎

    在测评该项目时,我找到了Hello World!团队的git,并下载了相关文件以及阅读了程序运行说明. 如图所示,我下载了一个名为 SkyHunter1.0.rar 的压缩文件包,文件包内容如下: 根 ...

  3. HDU 5391Z ball in Tina Town 数论

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5391 bc:  http://bestcoder.hdu.edu.cn/contests/c ...

  4. lintcode-24-LFU缓存

    24-LFU缓存 LFU是一个著名的缓存算法 实现LFU中的set 和 get 样例 capacity = 3 set(2,2) set(1,1) get(2) >> 2 get(1) & ...

  5. SQL之case when then用法详解

    case具有两种格式.简单case函数和case搜索函数. <span style="font-size:14px;">--简单case函数 case sex when ...

  6. Haproxy + Rabbit 集群 简要介绍

    # 两台主机都安装上rabbitMQ yum install -y rabbitmq-server   # 两台主机都配置/etc/hosts文件 192.168.23.10 rabbitmq1 19 ...

  7. form表单元素中disabled的元素的值不会提交到服务器

    1.表单元素中disabled的元素的值不会提交到服务器,后台获取的值为null <form id="myForm" action="#" method= ...

  8. ping(团队作业)

    一,团队成员 何守成 031602408(队长) 黄锦峰 031602411 肖逸清 031602435 张子纯 031602441 蔡志斌 031602602 柯叶祥 031602414 二.作业链 ...

  9. 【vue】vue组件的自定义事件

    父组件: <template> <div> <my-child abcClick="sayHello"></my-child> &l ...

  10. css 在背景图上加渐变

    <html> <head> <title>我的第一个 HTML 页面</title> <style> .banner { width: %; ...