又一次呕心沥血的开发过程(tomcat热部署和jenkins持续集成)

  自从开始做项目的两周多以来,可谓是每天多活在忙碌的日子里。因为各方面的技术还不能达到要求,不够成熟,很多技术还停留在理论阶段,所以采取了“边学边写边改”的开发模式,两周的时间,学到了很多在走阶段过程中学习不到的知识。

  上周末的时候已经将后端的接口写完,实现了项目后端的基本需求。因为采用的是前后端分离的方式,所以在部署项目的时候发现,我们平时将JavaEE项目开发完后,需要将项目部署到服务器的tomcat上。常用的部署方式是将项目打包成war包放到tomcat的webapps下,然后重启tomcat,然后通过ip地址+端口号访问。这样部署本身是没问题的,但问题在于,如果还是在生产环境下的话,需要频繁的更改优化项目,那么就需要频繁的将项目打war包,替换webapps下的war包,操作繁琐。如果频繁修改的话,会大大降低开发的效率。

  刚好上次和一位Java后端开发工程师进行交流时,讨论了下这个问题,得知热部署和持续集成两种方式都可以解决眼下的需求。所以就去了解和学习了tomcat+maven实现热部署和使用jenkins持续集成两项技术,自动编译项目并部署到远程的服务器。

  但是在学习和使用过程当中,真真切切遇到了很多的问题,不只是配置和使用上的问题,还有很多以前在学习ssm时遗留的IDEA、maven,以及云服务器linux等等问题。tomcat热部署还好一些,虽然也遇到了一些坑,但是很快也都解决了。但是以前遗留的一个maven打包时,resources文件夹下配置文件不能打包到classes下,导师jar包或者war包中没有配置文件而导致报错。以前在学习ssm的时候也遇到这个问题了,当时找到的解决办法是在idea的build时配置resources的打包路径,可以解决这个问题,但是每次更改resources下文件的时候都需要重新rebuild这个项目。虽然当时解决了这个问题,但是。。。。。

  在学习使用jenkins持续集成的时候,遇到了两个比较恶心的问题。一个是自己写的tomcat重启的脚本,总是会在jenkins中报错;花费了好久的时间才解决。明明是别人测试可以成功的,但是到我这里就是不行
百度别人的代码——tomcat重启脚本

#! /bin/bash
tomcat_home=/usr/local/tomcat-8
SHUTDOWN=$tomcat_home/bin/shutdown.sh
STARTTOMCAT=$tomcat_home/bin/startup.sh
echo "关闭$tomcat_home"
$SHUTDOWN
#杀死tomcat进程
ps -ef|grep $path|grep java|awk '{print $2}'|xargs kill -9 
#删除日志文件,如果你不先删除可以不要下面一行
rm  $tomcat_home/logs/* -rf
#删除tomcat的临时目录
rm  $tomcat_home/work/* -rf
sleep 5
echo "启动$tomcat_home"
$STARTTOMCAT
#看启动日志
#tail -f $tomcat_home/logs/catalina.out

经过我无数次的试验和修改终于不报错了

#! /bin/bash
export LANG=zh_CN.UTF-8
export JAVA_HOME=/usr/local/jdk8
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$CATALINA_BASE/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
tomcat_home=/usr/local/tomcat8.5
SHUTDOWN=$tomcat_home/bin/shutdown.sh
STARTTOMCAT=$tomcat_home/bin/startup.sh
echo "关闭$tomcat_home"
$SHUTDOWN
#杀死tomcat进程
ps -ef|grep $path|grep java|grep -v 'grep'|awk '{print $2}'|xargs kill -9
#删除日志文件,如果你不先删除可以不要下面一行
rm  $tomcat_home/logs/* -rf
#删除tomcat的临时目录
rm  $tomcat_home/work/* -rf
sleep 5
echo "启动$tomcat_home"
$STARTTOMCAT
#看启动日志
#tail -f $tomcat_home/logs/catalina.out

但却也报出了我不理解的地方,总算是没有在jenkins中报错,就先这样了,先用着,之后在解决。

[root@VM_0_8_centos bin]# vim restart.sh

[1]+  Stopped                 vim restart.sh
[root@VM_0_8_centos bin]# ./restart.sh
关闭/usr/local/tomcat8.5
Using CATALINA_BASE:   /usr/local/tomcat8.5
Using CATALINA_HOME:   /usr/local/tomcat8.5
Using CATALINA_TMPDIR: /usr/local/tomcat8.5/temp
Using JRE_HOME:        /usr/local/jdk8/jre
Using CLASSPATH:       /usr/local/tomcat8.5/bin/bootstrap.jar:/usr/local/tomcat8.5/bin/tomcat-juli.jar
用法: grep [选项]... PATTERN [FILE]...
试用‘grep --help’来获得更多信息。

用法:
 kill [选项] <pid|名称> [...]

选项:
 -a, --all              不限于只对和当前进程的用户 id 相同的进程进行
                        名称-进程id 转换
 -s, --signal <信号>     发送指定的信号
 -q, --queue <信号>      使用 sigqueue(2) 代替 kill(2)
 -p, --pid              打印 pid 而不向它们发送信号
 -l, --list [=<信号>]   列出信号名,或将一个信号转换为名称
 -L, --table            列出信号名和数值

 -h, --help     显示此帮助并退出
 -V, --version  输出版本信息并退出

更多信息请参阅 kill(1)。
启动/usr/local/tomcat8.5
Using CATALINA_BASE:   /usr/local/tomcat8.5
Using CATALINA_HOME:   /usr/local/tomcat8.5
Using CATALINA_TMPDIR: /usr/local/tomcat8.5/temp
Using JRE_HOME:        /usr/local/jdk8/jre
Using CLASSPATH:       /usr/local/tomcat8.5/bin/bootstrap.jar:/usr/local/tomcat8.5/bin/tomcat-juli.jar
Tomcat started.

  据我初步推测,可能是因为“ps -ef|grep path|grep java|grep -v 'grep'|awk '{print2}'|xargs kill -9”的语法问题,可能进程也并没有关闭,但是但是,之后jenkins确实也可以正常部署了。。。。。

  另一个问题就是上边提到的问题,在jenkins中实现自动编译部署,需要借用maven,但是上边解决那个问题是通过IDEA工具去解决的,这次使用jenkins就不能使用那种方法了。问题很明显是出在了maven的打包上,百度搜了很多的解决方法,大都是在pom文件中添加以下代码

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <!--包含文件夹以及子文件夹下所有资源-->
                <include>**/*.*</include>
            </includes>
        </resource>
    </resources>
</build>

  搜了很多很多,但是基本都是这个实现方法,可是我一使用,总是不能达到预期的效果,非常的难受,差点心态爆炸。最后发现问题,原来在于,我潜意识一直认为/src/mian下的资源文件是resource,所以就发生了一下这张图的悲催

图片发自简书App

在这里浪费了我半天的时间,心态爆炸,但好在总算解决了。

jenkins部署测试了43次才真正将部署到云服务器,并本地访问成功


图片发自简书App

  之后解决这个问题后,项目的war包中的根目录重新显示resources的配置文件,在云服务器上运行成功。

  在实际的开发当中总是会遇到奇奇怪怪的问题,但是坚持下去,采用各种方法去不断尝试,总是会成功的。过程虽然呕心沥血,但是解决问题的那一刻,也总是会由衷的nice!!!

下面分享下我的两篇关于tomcat热部署和jenkins持续集成实现项目自动化部署的博客

  1. SSM项目频繁打成war包部署操作频繁?使用tomcat和maven实现热部署
    https://blog.csdn.net/qq_42937522/article/details/103256180
  2. jenkins持续集成实现本地项目自动化部署到服务器
    后续更新。。。。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351