tomcat自动部署代码脚本

简易的自动化部署脚本shell 小麦是一名开发人员,每天写完代码后,都要打包部署到集成环境,然后等着测试人员测试,测试人员提出bug时,小麦懊恼的修改着bug,然后修改代码,重新提交SVN,重新打包,上传到集成服务器,然后重启服务器,这么重复的工作,小麦忍不了了,决定化繁为简。 小麦想着最近自己一直在学linux shell编程,是时候展示一波真正的技术了。刚学到新的命令:rz,小麦跃跃欲试。小麦一想,有了r... 阅读详情

http://ask.apelearn.com/question/8020


脚本如下:==============================================================================================
#!/usr/bin/env python
##coding:utf-8
#written by xeonzhang
#Description: 自动部署tomcat程序,当启动成功nginx自动切换配置转发端口
#Create_time:20150519

import os
import subprocess 
import re
import sys
import time
import datetime
import paramiko
import pexpect 
import math
import urllib2

        

def fail_to_delete(mount_path):
    #通过nginx配置文件判断目前哪一个tomcat在运行
        is_tomcat8080_start = 'cat /usr/share/nginx/conf/nginx.conf | grep tomcat6_4_8080.conf | wc -l'
        is_tomcat8080_count = int(subprocess.check_output(is_tomcat8080_start,shell=True).strip())
        if is_tomcat8080_count == 1:
            #为1则将tomcat6_4_8082所在的服务停止
            stop_tomcat8082 = '/usr/share/tomcat6_4_8082/start.sh stop'
            os.system(stop_tomcat8082)
                print "已关闭启动失败的tomcat进程"
        #删除tomcat6_4_8082所有传进去的代码
                rm_tomcat8082_code = 'rm -rf /usr/share/tomcat6_4_8082/lubanwebapps/*'
                os.system(rm_tomcat8082_code)
                print "已删除启动失败的程序代码!"
                #传False值给外部程序
        echo_status_command = "echo ' ' >%s/tomcat_log/False" %mount_path
                os.system(echo_status_command)
        else:
            #不为1则将tomcat6_4_8080所在的服务停止
                stop_tomcat8080 = '/usr/share/tomcat6_4_8080/start.sh stop'
            os.system(stop_tomcat8080)
                print "已关闭启动失败的tomcat进程"
        #删除tomcat6_4_8080所有传进去的代码
                rm_tomcat8080_code = 'rm -rf /usr/share/tomcat6_4_8080/lubanwebapps/*'
                os.system(rm_tomcat8080_code)
                print "已删除启动失败的程序代码!"
                #传False值给外部程序
        echo_status_command = "echo ' ' >%s/tomcat_log/False" %mount_path
                os.system(echo_status_command)


def change_nginx_conf(mount_path):
    #通过nginx配置文件判断目前哪一个tomcat在运行
        is_tomcat8080_start = 'cat /usr/share/nginx/conf/nginx.conf | grep tomcat6_4_8080.conf | wc -l'
        is_tomcat8080_count = int(subprocess.check_output(is_tomcat8080_start,shell=True).strip())
        #为True则将配置文件切换成tomcat6_4_8082.conf
        if is_tomcat8080_count == 1:
            change_conf_command = "sed -i 's#tomcat6_4_8080.conf#tomcat6_4_8082.conf#g' /usr/share/nginx/conf/nginx.conf"
        os.system(change_conf_command)
        print "nginx配置已经成功切换至tomcat6_4_8082.conf!"
                #reload nginx 
                nginx_reload_command = '/etc/init.d/nginx reload'
                os.system(nginx_reload_command)
                #传True值给外部程序
        echo_status_command = "echo ' ' >%s/tomcat_log/True" %mount_path
                os.system(echo_status_command)
                #结束tomcat6_4_8080进程
                stop_tomcat8080_pid = '/usr/share/tomcat6_4_8080/start.sh stop'
                os.system(stop_tomcat8080_pid)
                print "现tomcat启动成功,原有tomcat服务进程已停止"
                #删除tomcat6_4_8080目录下的所有代码
                rm_8080_code = 'rm -rf /usr/share/tomcat6_4_8080/lubanwebapps/*'
                os.system(rm_8080_code)
                print "现tomcat启动成功,原有tomcat代码已删除"
    else:
        change_conf_command = "sed -i 's#tomcat6_4_8082.conf#tomcat6_4_8080.conf#g' /usr/share/nginx/conf/nginx.conf"
        os.system(change_conf_command)
        print "nginx配置已经成功切换至tomcat6_4_8080.conf!"
                #reload nginx 
                nginx_reload_command = '/etc/init.d/nginx reload'
                os.system(nginx_reload_command)
                #传True值给外部程序
        echo_status_command = "echo ' ' >%s/tomcat_log/True" %mount_path
        os.system(echo_status_command)        
                #结束tomcat6_4_8082进程
                stop_tomcat8082_pid = '/usr/share/tomcat6_4_8082/start.sh stop'
                os.system(stop_tomcat8082_pid)
                print "现tomcat启动成功,原有tomcat服务进程已停止"
        #删除tomcat6_4_8082目录下的所有代码
                rm_8082_code = 'rm -rf /usr/share/tomcat6_4_8082/lubanwebapps/*'
                os.system(rm_8082_code)
        print "现tomcat启动成功,原有tomcat代码已删除"                
        
def tomcat_check_httpcode(code_path, port):
    #循环查询当前几个项目返回的httpcode值
        webapps_dir_list = os.listdir(code_path)
    for w in webapps_dir_list:
            url = ' http://localhost:8082/%s' %(port, w.split('.')[0])
                response = 'None'
                try:
            response = urllib2.urlopen(url,timeout=5)
                        if str(response.getcode())[0] != '2':
                            return False
                        response.close()        
        except urllib2.URLError as e:
            if hasattr(e, 'code'):
                print 'Error code:',e.code
                                return False
            elif hasattr(e, 'reason'):
                print 'Reason:',e.reason
                                return False
                
        return True
        
        
        

        
def tomcat_check_error(mount_path):
    #判断挂载目录下日志文件目录是否存在,存在则删除
        test_log_exit = 'test -d %s/tomcat_log && rm -rf %s/tomcat_log' %(mount_path, mount_path)
    #通过nginx配置文件判断目前哪一个tomcat在运行
        is_tomcat8080_start = 'cat /usr/share/nginx/conf/nginx.conf | grep tomcat6_4_8080.conf | wc -l'
        is_tomcat8080_count = int(subprocess.check_output(is_tomcat8080_start,shell=True).strip())
        boolean_is_success = True
        if is_tomcat8080_count == 1:
            #删除tomcat8082内所有不需要的遗留物
                rm_tomcatlog_in_mount = 'test -d %s/tomcat_log && rm -rf %s/tomcat_log' %(mount_path, mount_path)
                rm_tomcat8082_pre_code = 'rm -rf /usr/share/tomcat6_4_8082/lubanwebapps/*'
                rm_tomcat8082_pre_logs = 'rm -rf /usr/share/tomcat6_4_8082/logs/*'
                os.system(rm_tomcat8082_pre_code)
                os.system(rm_tomcat8082_pre_logs)
                os.system(rm_tomcatlog_in_mount)
            #将外面挂载目录的数据拷贝到8082端口容器的webapps目下
                cp_to8082_command = 'cp -a %s/* /usr/share/tomcat6_4_8082/lubanwebapps/' %mount_path
                print "开始拷贝编译包到tomcat_8082目录..."
                os.system(cp_to8082_command)
                #清理tomcat8082 日志目录
                print "拷贝数据完成!"
                print "+----------------------------------------------------------+"
        print "***************开始启动tomcat_8082程序 *******************"
        print "+----------------------------------------------------------+"
                start_tomcat8082 = '/usr/share/tomcat6_4_8082/start.sh start'
                os.system(start_tomcat8082)
                #软链接日志文件到挂载目录里面
                ln_command = 'ln -s /home/www/data/log/tomcat6_4_8082 %s/tomcat_log' %mount_path
                os.system(ln_command)
                #循环100次
                for i in range(1,100):
                    ##根据tomcat日志判断启动是否成功
            list_error_keywords = ['Exception','SEVERE','ERROR','严重','错误']
                        list_success_keywords = []
                        #当有一个或多个错误关键字时候判断tomcat启动失败
            for e in list_error_keywords:
                is_error_command = 'cat /home/www/data/log/tomcat6_4_8082/catalina.out | grep %s | wc -l ' %e
                is_error_count = int(subprocess.check_output(is_error_command,shell=True).strip())
                if is_error_count != 0:
                    print "tomcat8082启动失败!"
                                        #停止tomcat8082的启动,并删除目录内的文件
                                        boolean_is_success = False
                    return False
                                        
                        #判断当返回httpcode值都是2开头的状态码时,返回True
                        if tomcat_check_httpcode('/usr/share/tomcat6_4_8082/lubanwebapps','8082'):
                            return True                                
            #休眠5秒                                        
            time.sleep(5)
                        
        #当参数为True的时候,判断tomcat启动成功
            if boolean_is_success == True:
                    return True                        

    else:
            #删除tomcat8080内所有不需要的遗留物
                rm_tomcat8080_pre_code = 'rm -rf /usr/share/tomcat6_4_8080/lubanwebapps/*'
                rm_tomcat8080_pre_logs = 'rm -rf /usr/share/tomcat6_4_8080/logs/*'
                rm_tomcatlog_in_mount = 'test -d %s/tomcat_log && rm -rf %s/tomcat_log' %(mount_path, mount_path)
                os.system(rm_tomcat8080_pre_code)
                os.system(rm_tomcat8080_pre_logs)
                os.system(rm_tomcatlog_in_mount)
        #将外面挂载目录的数据拷贝到8080端口容器的webapps目下
        cp_to8080_command = 'cp -a %s/* /usr/share/tomcat6_4_8080/lubanwebapps/'        %mount_path        
                print "开始拷贝编译包到tomcat_8080目录..."
                os.system(cp_to8080_command)
                print "拷贝数据完成!"
                print "+----------------------------------------------------------+"
        print "***************开始启动tomcat_8080程序 *******************"
        print "+----------------------------------------------------------+"
                start_tomcat8080 = '/usr/share/tomcat6_4_8080/start.sh start'
                os.system(start_tomcat8080)    
                #软链接日志文件到挂载目录里面
                ln_command = 'ln -s /home/www/data/log/tomcat6_4_8080 %s/tomcat_log' %mount_path
                for i in range(1,100):
                    ##根据tomcat日志判断启动是否成功
            list_error_keywords = ['Exception','SEVERE','ERROR','严重','错误']
                        list_success_keywords = []
                        #当有一个或多个错误关键字时候判断tomcat启动失败
            for e in list_error_keywords:
                is_error_command = 'cat /home/www/data/log/tomcat6_4_8080/catalina.out | grep %s | wc -l ' %e
                is_error_count = int(subprocess.check_output(is_error_command,shell=True).strip())
                if is_error_count != 0:
                    print "tomcat8080启动失败!"
                                        #停止tomcat8080的启动,并删除目录内的文件
                                        boolean_is_success = False
                    return False
                        #判断当返回httpcode值都是2开头的状态码时,返回True
                        if tomcat_check_httpcode('/usr/share/tomcat6_4_8080/lubanwebapps','8080'):
                            return True
            #休眠5秒                                        
            time.sleep(5)
                #当参数为True的时候,判断tomcat启动成功
            if boolean_is_success == True:
                    return True
                        

#主程序入口
if __name__ == "__main__" :
    #argv
    mount_path = '/usr/share/codes'
        #判断tomcat是否启动成功
    if tomcat_check_error(mount_path): 
            #成功则切换nginx配置,并且返回一个文件告知是否成功
        change_nginx_conf(mount_path)
                
        
    else:
            #不成功则删除该失败tomcat内的所有程序,并且返回一个文件告知启动失败
        fail_to_delete(mount_path)

==================================================================================
功能需求:在一台服务器或者docker容器内 安装了2个tomcat+1个nginx
nginx:用于转发
tomcat:一个正常启动运行,当有新的代码提交时候,自动将代码存入另一个非启动tomcat内,并且启动。
             判断:当新tomcat启动成功,则停掉原来的tomcat,并且修改nginx转发端口
                       当新tomcat启动不成功,则删除新tomcat内代码。返回启动不成功信息。
心得:需求不复杂,只是细节考虑的要全面,什么时候要删除什么,逻辑需要清晰。另外就是要不停的测试脚本有没有BUG存在!
        用到了urllib2库,还判断http get的code值是不是200.这是新运用到的库。

RK3588S开发板实战:手把手教你调试IMX415摄像头(附常见问题排查) 本文提供了基于RK3588S开发板调试IMX415摄像头的完整实战指南。从硬件连接到软件配置,详细解析了设备树(DTS)设置、驱动加载验证及V4L2工具链使用,并附带了常见问题排查方法,帮助开发者快速解决摄像头调试中的典型问题,实现图像采集与性能调优。 阅读详情

相关推荐

AI工程化之生成式UI & A2UI(二)

本文介绍了生成式UI框架A2UI的架构设计与核心实现。项目采用AI协作开发模式,通过ATDD(AI驱动的测试驱动开发)确保代码质量。前端SDK基于zustand实现框架无关的状态管理,包含协议解析器、存储管理、渲染器等核心模块。重点展示了基础store构建、A2UI协议解析器的实现过程,包括mock数据准备、测试用例生成和可视化调试。项目采用monorepo管理,利用vite实现高效开发构建。整个系统设计遵循模块化原则,通过清晰的接口定义实现各组件解耦,为后续功能扩展打下基础。

qq_34306228的博客 407

http服务器——Tomcat使用——如何发布网站

Tomcat是java中最流行的http服务器Tomcat就相当于是网站的“底座”,所写的网站要架到这个底座上,其他用户才能顺利访问(java中)

ii804070359的博客 1958

fpga的希尔伯特变换实现

fpga的希尔伯特变换实现零.实现背景一.希尔伯特实现的基本原理2.实现1)matlab仿真1)fpga滤波器实现实现成本:fpga实现采用VIvado的FIR的IP核, 零.实现背景 因为今明工作项目需要使用到希尔伯特变换来处理问题,所以顺便就把设计流程和代码都整理下来,以便供他人使用。选用Xilinx的7系列板子,Vivado平台。 一.希尔伯特实现的基本原理 希尔伯特变换的物理意义十分简单:...

weixin_42219690的博客 1万+

# Tomcat 多实例部署 教程

Tomcat 多实例部署 教程我们首先看到的是tomcat的目录结构,其每个文件夹有以下用途:bin – 包含所有运行tomcat的二进制和脚本文件 lib – 包含tomcat使用的所有共享库 conf - 包含配置信息,如tomcat绑定的端口等 logs – 包含所有的日志文件 temp – 此目录是tomcat存放的临时文件 webapps – 此目录非常重要,这里存放所有的应用程

CHINADENG的专栏 3302

手势控制 Python !Leap Motion Python 开发教程 (二)

手势控制 Python !Leap Motion Python 开发教程 (二) 现在进入正题,我来给大家总结一下我在使用 Leap Motion 开发过程中的经验以及学到的东西,其中我会概括以及翻译官方给出的注释,为了让这些注释更加通俗易懂,让大家更好理解。 回顾 在上一篇文章中我们讲了如何配置 Leap Motion 的 Python 2.7 的开发环境,如果您还没有配置好您的开发环境,可以参...

成畅的博客 3193

SVDD和OCSVM的比较

OCSVM(one class support vector machine)即单类支持向量机,最先提出的文献为:Estimating the support of a high-dimensional distribution.该模型 将数据样本通过核函数映射到高维特征空间,使其具有更良好的聚集性,在特征空间中求解一个最优超平面实现目标数据与坐标原点的最大分离,如图1: 坐标原...

qq_33880788的博客 1万+

拆解Tomcat10: (四) 图解架构

上一篇从Bootstrap类中的main方法开始了代码调试之旅,现在我们继续这个过程,看看Tomcat的核心组件架构。

2i3i.com 2298

手把手教你搭建Howland电流源:从原理图到实测避坑指南(附Python数据分析)

本文详细介绍了Howland电流源的设计与实现,从原理图到实测避坑指南,涵盖电阻匹配、运放选择和PCB布局等关键环节。通过Python数据分析,展示了如何优化电路性能并解决常见问题,适合电子工程师和爱好者参考。

weixin_29291069的博客 636

tomcat源码流程

Tomcat9.0.x启动流程 1.idea部署tomcat源码 1.clone项目 2.修改配置 修改build.properties.default⽂件中的base.path为当前项目目录 base.path=${basedir}/tomcat-build-libs 3.编译 1.安装ant 地址:https://ant.apache.org/ 下载:apache-ant-1.10.10-bin.zip,配置环境变量后项目下执行命令: ant ide-intellij 生成tomcat-build-

豆腐蛋 542

AgentScope实战训练营:从零搭建一个完整的A2A Agent应用

2024年4月,Google在Google Cloud Next大会上正式提出了A2A(Agent-to-Agent)协议,这是一个开放协议,旨在让不同的AI Agent之间能够像微服务一样相互发现、相互调用。通俗地讲:A2A协议就是AI Agent世界的HTTP协议——有了它,一个Agent可以把自己的能力以标准化的方式暴露出去,另一个Agent可以无缝地发现并调用它。本文将基于阿里巴巴开源的(Apache 2.0协议),手把手带你从零搭建一个完整的A2A Agent应用。

program哲学 566

C#解析基恩士(KEYENCE)PLC数据:KV协议通信与实时监控实现

KV协议是基恩士PLC使用的一种专用通信协议,通常用于与上位机进行数据交换。KV协议通过RS-232C、RS-485、Ethernet等接口与上位机通信,支持多种数据类型的读写,包括但不限于位、字、双字、浮点数等。简洁易用:KV协议的通信格式简单,易于实现。支持多种数据类型:支持位数据、字数据、定长字符串等。高效实时性:能够提供较高的实时数据交换性能,适合实时监控应用。本文介绍了如何通过C#与基恩士KV系列PLC进行通信,实现数据的解析和实时监控功能。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1808

Tomcat源码阅读(三):Catalina启动类

org.apache.catalina.startup.Bootstrap是tomcat的启动类,即入口类。而实际上Tomcat的启动是通过org.apache.catalina.startup.Catalina来执行的,Bootstrap类只是一层代理,通过反射的方式来调用Catalina的start()方法。 接下来让我们看看看Catalina类start()方法具体做了哪些操作。 /** * Start a new server instance. */ pu

qq_34684394的博客 1229

VCS NLP 低功耗验证系列(六):功耗分析与优化——SAIF 报告与验证效率提升

本文是VCS NLP低功耗验证系列的第六篇,主要解决功耗数据采集和验证效率优化问题。文章首先介绍了SAIF(Switching Activity Interchange Format)文件在功耗分析中的作用,详细讲解了VCS的Region-Based SAIF功能,包括三个关键系统任务($saif_region_create、$saif_region_exclude、$saif_region_monitor)的使用方法和工程实践建议。接着从编译侧、运行侧和方法学侧三个维度提出了NLP验证效率优化策略,特别强

元直的博客 472

Java工程自动部署脚本(Tomcat容器)

#!/bin/shecho '自动部署--Tomcat项目'#项目名<必填>projectName='push_service'#需要替换的config文件路径configFilePath='/opt/scripts/test'#定义时间变量名和显示时间格式datename=$(date +%Y%m%d-%H%M%S)             #要部署的git分支<必填>[...

郭宇浩的博客 516

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

shell脚本自动化部署服务

shell脚本自动化部署服务 shell脚本自动化部署 !/bin/bash #export PATH=$PATH:/export/maven/bin run_flag_dir="/data0/shell/deploy_workspace/Test" if [ ! -d "$run_flag_dir" ]; then ...

诸葛子房的博客 930

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Linux系统下tomcat自动拉取代码打包发布的配置部署和脚本编写(转朋友)

在工作中经常遇到项目发布的繁杂问题,要是有专业的运维测试人员还好,如果没有就无形中给后台开发人员造成了更大的压力,下面我们分析一下普通打包过程和自动打包过程。 普通打包过程(Eclipse为例): 1、在Eclipse中执行打包的命令,将需要发布的系统打成war包; 2、将war包上传到服务器上,执行启动tomcat的命令,运行项目。 缺点:需要输入一系列的命令,执行打包,上传包,对依赖的

IT-CRUD 2674

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Web系统自动化部署脚本

Web开发的项目,除了在本地直接运行外,还可能经常需要在服务器上部署。 写了个自动化部署的脚本,仅供参考。 不少地方需要配置路径,个人建议使用绝对路径,不用依赖执行脚本时所在的路径。 #!/bin/sh #删除源代码目录,重新更新最新代码echo 'delete ...

chulilang8944的博客 117

Linux Shell脚本专栏_自动发布Java项目(tomcat)_10

文章目录一、需求背景及实现流程1. 需求背景2. 实现流程二、软件准备2.1. 公共工具包yum下载2.2. tomcat安装及配置2.3. maven安装及配置2.4. 脚本制作2.5. 运行脚本 一、需求背景及实现流程 1. 需求背景 order项目代码已经到版本仓库中,执行shell脚本一键部署 2. 实现流程 实现流程 实现流程说明 1. 远程拉取git远程仓库代码 ...

Gblfy_Blog 796

tomcat git linux部署脚本

#!/bin/sh #author : cc #停服务 sh /ROOT/scripts/tomcat_service_control/autonavi_aos_pns_manage_8180.sh stop #删除文件及缓存 sudo rm -rf /ROOT/server/taobao-tomcat-7.0.64/webapps/pns-pushservice sudo rm -rf /R

chen88358323的专栏 1604

部署tomcat的war包脚本

deploy-war.sh #!/bin/sh echo "============*******************=================" echo "============ java 自动部署脚本 =================" echo "============*******************=================" read -p "

笔尖的痕的专栏 1530

Jenkins小项目—代码测试、部署、回滚、keepalived+haproxy调度至tomcat

1.分别配置两台tomcat后端服务的java环境 1)准备jdk8压缩包 [root@tomcat jdk]# pwd /usr/local/src/jdk root@tomcat jdk]# ls jdk-8u211-linux-x64.tar.gz 2)解压jdk压缩包当前目录下并创建软连接 [root@tomcat jdk]# tar xvf jdk-8u211-linux-x6...

caolun0691的博客 770

tomcat快速更新脚本

#!/bin/bash # operating environment :CentOS release 6.8 # chkconfig: 2345 80 50 # Auther:wangjiana #tomcat存放地址 url=/dzzb/usr/local/ #代码拉取地址 urlsvn=/data/svnupload/ #更新日志 Update_log="/dzzb/usr/local/...

傻逼青年的春天 1316

大型项目linux自动化版本发布脚本(shell)之tomcat、nginx服务脚本

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33759269的博客 230

git linux上自动化打包发布脚本

#!/bin/bash HOME_DIR="/home/localadmin/" echo "git文件夹是"$HOME_DIR"nono-all" if [ ! -d $HOME_DIR"nono-all" ];#如果不是一个文件夹 then git config --global credential.helper store if [ $# -ne 1 ]; then

一年e度的夏天的专栏 5252

自动化部署-编写Shell脚本简单实现(终)

自动化部署,主流方式可能是:用开源的Jenkins。 本质上来讲,Jenkins只是个工具,集成各种各样的打包部署工具,比如集成JDK、Maven、Git,甚至可以维护shell脚本,自动执行。 实现自动化部署,咱们也可以自己写Shell脚本实现,当然是比较简单的那种。 比如,Git clone代码,Maven打包,自动停机,复制war包jar包到指定目录,启动。 如果,还需要执行 ...

AI一人公司实践中,AI全栈程序员,编程-产品-营销 1708

maven项目自动git打包发布重启Tomcat

shell 脚本下载 废话不多说直接上脚本 #!/bin/bash #Time log_time=`date +[%Y-%m-%d]%H:%M:%S` ###manual_properties### project_name=shuxin-java tomcat_basehome=/var/apache-tomcat-7.0.79_81 tomcat_port=80

500
上一篇: tomcat常用功能的配置方法
下一篇: HBase Client API简单
LuckyJiang.2021
博客等级 码龄15年 217粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值