当前位置:   article > 正文

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

dubbo + jenkins

上一章讲了如何编译我们第一个项目 但是有时候我们不仅仅只是编译更多的是需要发布 在微服务普及之前我们最常用的就无非就是通过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

  1. tomcat_home=/opt/tomcat/apache-tomcat-demo
  2. SHUTDOWN=$tomcat_home/bin/shutdown.sh
  3. STARTTOMCAT=$tomcat_home/bin/startup.sh
  4. echo "关闭$tomcat_home"
  5. $SHUTDOWN
  6. # ps 命令的作用是显示进程信息的, -e : 显示所有进程 -f : 全格式
  7. # grep 作用是查找
  8. # | 是管道符号 这里表示ps 和 grep 命令同时执行;
  9. # grep -v grep是列出除开grep命令本身的进程
  10. # awk '{print $2}' AWK是一种处理文本文件的语言,$2表示第2列,这里表示列出第二列的数据,根据上面的ps命令第二列是进程号
  11. # xargs 使用上一个操作的结果作为下一个命令的参数使用
  12. # kill -9 表示强杀
  13. ps -ef |grep tomcat |grep $tomcat_home |grep -v 'grep'|awk '{print $2}' | xargs kill -9
  14. #删除日志文件,如果你不先删除可以不要下面一行
  15. #rm $tomcat_home/logs/* -rf
  16. #删除tomcat的临时目录
  17. rm $tomcat_home/work/* -rf
  18. sleep 5
  19. echo "启动$tomcat_home"
  20. $STARTTOMCAT
  21. #看启动日志
  22. #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%

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/169630
推荐阅读
相关标签
  

闽ICP备14008679号