Dubbo+Zookeeper架构—持续集成篇14—Jenkins自动化部署:Jenkins编译一个Web项目并远程发布到Tomcat

上一章讲了如何编译我们第一个项目 但是有时候我们不仅仅只是编译更多的是需要发布 在微服务普及之前我们最常用的就无非就是通过tomcat运行war格式的项目了,本章将介绍如何配置一个传统的Java web项目并发布到远程tomcat上。

这里需要用到的插件为:Deploy to container Plugin 安装完成即可进入下一步

这里创建一个Job 流程参考上一章 但是这里我们选择一个web项目,不同于上一章的是需要在配置内多增加一个构建后的操作

然后下一步:

WAR/EAR files:代表编译后的war所在的路径和名字 由自己项目配置而决定(war包的相对位置)

Context path:项目启动后的上下文路径,不懂的问问自己可爱的Java开发人员就知道了 (项目上下文,比如设置为 "/")

Add Container:添加一个容器 里面有JBoss Tomcat等 这里我们选择Tomcat 8 上图是我已经选择好之后的截图

Credentials:tomcat 的用户名和密码,也可在此快速添加和主界面通过Credentials菜单添加

Tomcat URL:这个我就呵呵不说话(Tomcat 路径)
 

然后保存之后构建就ok了

这代表已经发布成功了 我们登入tomcat的管理页面瞅瞅

 

 

这里说个问题:

  • tomcat 中的 tomcat-users.xml 配置不生效原因 + tomcat8以上管理页面提示403问题解决方案

 

首先确定在conf目录下的server.xml文件有
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource auth="Container" description="User database that can be updated and saved" 
factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" 
pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
  </GlobalNamingResources>

这样一段代码,让tomcat启动服务后能加载到conf/tomcat-users.xml,这个文件。

 

user配置

<role rolename="tomcat"/>
 <role rolename="role1"/>
 <role rolename="manager-script "/>
 <role rolename="manager-jmx "/>
 <role rolename="manager-gui"/>
 <role rolename="manager-status"/>
 <user username="admin" password="admin" roles="tomcat,role1,manager-script,manager-jmx,manager-gui,manager-status"/>

 

修改了配置文件需要重新启动服务器,好让服务器重新加载修改后的配置文件。

 

  • tomcat8以上管理页面提示403问题

修改conf/tomcat-users.xml

<role rolename="manager"/>

<role rolename="manager-gui"/>
<role rolename="admin"/>

<user username="user" password="password" roles="admin,manager,manager-gui"/>

同时还需要修改,如无新建conf/Catalina/localhost/manager.xml 内容如下:

<Context privileged="true" antiResourceLocking="false"
         docBase="${catalina.home}/webapps/manager">
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>

 

 

  • 在实际应用当中,我们在配置构建项目时,还会判断tomcat服务器是否启动,先进行关闭tomcat服务器,然后再启动服务器。所以可以设置Post Steps

执行脚本:意思就是关闭tomccat,找到tomcat的进程杀掉,再重启tomcat

tomcat_home=/opt/tomcat/apache-tomcat-demo
SHUTDOWN=$tomcat_home/bin/shutdown.sh
STARTTOMCAT=$tomcat_home/bin/startup.sh
echo "关闭$tomcat_home"
$SHUTDOWN
# ps 命令的作用是显示进程信息的, -e : 显示所有进程   -f : 全格式
# grep 作用是查找   
# | 是管道符号 这里表示ps 和 grep 命令同时执行;
# grep -v grep是列出除开grep命令本身的进程
# awk '{print $2}' AWK是一种处理文本文件的语言,$2表示第2列,这里表示列出第二列的数据,根据上面的ps命令第二列是进程号
# xargs 使用上一个操作的结果作为下一个命令的参数使用
# kill -9 表示强杀
ps -ef |grep tomcat |grep $tomcat_home |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

再启动的时候,会发现,会发现可以进行关闭tomcat,但是无法启动tomcat,但是查看进程,tomcat是没有启动的。这是因为Jenkins默认会在Build结束后Kill掉所有的衍生进程。需要进行以下配置,才能避免此类情况发生:

  • 方法1:通过Jenkins提供的启动参数禁用杀死子进程的特性

Jenkins提供了hudson.util.ProcessTree.disable和hudson.util.ProcessTreeKiller.disable两个属性来控制些特性,值为true将禁用此特性。hudson.util.ProcessTree.disable从Jenkins 1.260开始使用,而使用1.315之前的Hudson时只能使用hudson.util.ProcessTreeKiller.disable,为了版本兼容,在Jenkins 1.260后这两个属性都可能使用,建议使用1.260之的Jenkins用户使用hudson.util.ProcessTree.disable属性。

        这种方式需要在Jenkins启动前进行设置,以下根据笔者的经验列举各种使用情况下如何设置,如有疏漏欢迎补充、指正。

 

  • 使用java -jar启动,-Dhudson.util.ProcessTree.disable=true -jar jenkins.war

使用Tomcat启动,Linux系统修改catalina.sh,在环境变量的说明后,脚本开始前加上JAVA_OPTS="$JAVA_OPTS -Dhudson.util.ProcessTree.disable=true";Windows系统修改catalina.bat,在环境变量的说明后,脚本开始前加上set JAVA_OPTS=%JAVA_OPTS% "-Dhudson.util.ProcessTree.disable=true";修改好Tomcat的配置文件后重新启动Tomcat

在大部分情况下彻底禁用此特性可能不是我们期望的结果,这种方法不建议在工作中使用,建议的方法请参考“方法二”

  • 方法二:修改Jenkins的环境变量BUILD_ID,这样Jenkins将不认为你启动的后台进程是由job创建的

           在execute shell或windows batch输入框的中执行期望job结束后继续运行的命令前加上如下代码(以启动tomcat为例):

Linux:
       OLD_BUILD_ID=$BUILD_ID
       echo $OLD_BUILD_ID
       BUILD_ID=DONTKILLME  //"DONTKILLME"只是为了可读性才写的,可以用任何你想用的内容代替
       startup.sh                          //根据实际情况修改启动命令的路径
       BUILD_ID=$OLD_BUILD_ID
       echo $BUILD_ID

 

Windows

       OLD_BUILD_ID=%BUILD_ID%
       echo %OLD_BUILD_ID%
       BUILD_ID=DONTKILLME
       startup.bat                          //根据实际情况修改启动命令的路径
       BUILD_ID=%OLD_BUILD_ID%
       echo %BUILD_ID%

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值