赞
踩
上一章讲了如何编译我们第一个项目 但是有时候我们不仅仅只是编译更多的是需要发布 在微服务普及之前我们最常用的就无非就是通过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的管理页面瞅瞅
这里说个问题:
首先确定在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配置
修改了配置文件需要重新启动服务器,好让服务器重新加载修改后的配置文件。
修改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>
执行脚本:意思就是关闭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掉所有的衍生进程。需要进行以下配置,才能避免此类情况发生:
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启动前进行设置,以下根据笔者的经验列举各种使用情况下如何设置,如有疏漏欢迎补充、指正。
使用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%
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。