之前说过很长一段时间内,我使用jenkins仅仅是涉及两个地方:配置svn版本,点击立即构建。
所以一直特别好奇jenkins的各个插件究竟是怎么工作的。然后最近研究了一下我这边用上的几个插件,虽然不够透彻,但好歹对jenkins的构建过程有了一定程度的了解^_^
Ant
jenkins是如何利用ant编译程序并打成war包的呢?ant是基于build.xml工作的。所以我研究了一下build.xml的具体内容:
【可参考,博主写的非常详细】
2.svn
jenkins安装的时候默认安装了svn插件。
配置项目的时候,源码管理选择"Subversion"
Repository URL填入源码的svn路径,可以在路径后面加上@版本号,如@1251jenkins则会从 svndownload1251版本的代码
3.deploy
将war包远程到服务器上。
那么问题来了,jenkins是如何得知war包将放到什么位置呢?
还记得在“jenkins部署java项目之小白的笔记”配置deploy环节吗,当时我配置的Tomcat URL=http://localhost:8080,因为localhost:8080是本地的指向本地tomcat,所以war包将发送到
${env.CATALINA_HOME}/webapps
在此之前我所操作的步骤都是基于本地,但实际上java项目一般都是放到linux机器来运行,那么
接下来说说deploy插件将war远程到linux机器上。
因为8080是tomcat的默认端口,所以一般对于基于tomcat运行的项目会另外配置一个端口号,具体
步骤如下:
(1)在apach目录下新建一个文件夹,以项目名称命名[当然文件夹路径和项目名称也可以按个
人喜好自取]
cd apache-tomcat mkdir MyFirstJob
(2)在项目文件下新建三个文件夹,并将tomcat的相应内容copy过来
cd MyFirstJob mkdir conf mkdir webapps mkdir temp cp -r /home/tomcat/apache-tomcat/conf/server.xml /home/tomcat/apache-tomcat/testJob/conf/ cp -r /home/tomcat/apache-tomcat/conf/tomcat-users.xml /home/tomcat/apache-tomcat/testJob/conf/ cp -r /home/tomcat/apache-tomcat/conf/web.xml /home/tomcat/apache-tomcat/testJob/conf/ cp -r /home/tomcat/apache-tomcat/webapps/manager /home/tomcat/apache-tomcat/testJob/webapps
(3)对server.xml及tomcat-user.xml,context.xml进行编辑,使用vi命令,此处不再一一赘述,仅给出最后范本
cat server.xml
cat tomcat-user.xml
修改server.xml,主要是为了设置端口号及配置deploy属性,该文件中的变量值都是从启动项目的可执行文件中获取的,即我在第(4)步将中提到的MyFirstJob-startup.sh
修改tomcat-user.xml前面也提到过,因为jenkins在配置deploy是需要填写的用户名和密码即来自该处
context.xml是配置数据库连接,此处就不提供详细内容了~
(4)新建编辑启动项目的可执行文件MyFirstJob-startup.sh,它的作用同同${env.CATALINA_HOME}/bin/startup.bat。我在本地部署项目的时候,上面提到jenkins会将war包打到${env.CATALINA_HOME}/webapps,之后双击${env.CATALINA_HOME}/bin/startup.bat,tomcat会自动解压war包并启动项目,因为项目现在需要部署在linux机器上,同样需要.sh一个可执行文件来启动项目
cd confvi MyFirstJob-startup.sh
#!/bin/shexport CATALINA_HOME=$CATALINA_HOME7export TOMCAT_HOME=$TOMCAT_HOME7exportCATALINA_OPTS="-agentpath:/home/tomcat/soft/jprofiler8/bin/linux-x64/libjprofilerti.so=port=8849,nowait-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=8888-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false-Djava.rmi.server.hostname=192.168.xx.xx -Dtomcat.server.port=7001-Dtomcat.http.port=8001 -Dtomcat.ajp.port=9001 -Dtomcat.instance.name=MyFirstJob-Xms8192m -Xmx8192m -XX:PermSize=1024m -XX:MaxPermSize=2048m-XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:+UseParNewGC"export CATALINA_OUT="/home/tomcat/apache-tomcat/MyFirstJob/logs/Catalina/catalina.$(date+'%Y-%m-%d').out"export CATALINA_PID="/home/tomcat/apache-tomcat/tomcat-MyFirstJob.pid"export CATALINA_BASE="/home/tomcat/apache-tomcat/MyFirstJob"exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TOMCAT_HOME/lib:/usr/local/apr/lib:/usr/local/aprrm -rf /home/tomcat/apache-tomcat/MyFirstJob/work/home/tomcat/apache-tomcat/bin/catalina.sh startexit $?
ps:端口号可自行更换
再将MyFirstJob-startup.sh变成一个可执行文件,之后可以看到文件变成粗体,ll命令也可以看到权限改变。
chmod a+x MyFirstJob-startup.sh ll conf
-rwxrwxr-x 1 tomcat tomcat 1072 Apr 9 15:10 MyFirstJob-startup.sh
-rw------- 1 tomcat tomcat 6466 Apr 9 12:05 server.xml-rw------- 1 tomcat tomcat 1530 Apr 9 12:05 tomcat-users.xml-rw------- 1 tomcat tomcat 162905 Apr 9 12:06 web.xml安装过tomcat的童鞋都知道tomcat由startup.bat启动,由shutdown.bat停止
vi MyFirstJob-shutdown.sh
#!/bin/shexport JAVA_OPTS="-Dtomcat.server.port=7001"export CATALINA_HOME=$CATALINA_HOME7export TOMCAT_HOME=$TOMCAT_HOME7export CATALINA_PID="/home/tomcat/apache-tomcat/tomcat-MyFirstJob.pid"export CATALINA_BASE="/home/tomcat/apache-tomcat/MyFirstJob"/home/tomcat/apache-tomcat/bin/catalina.sh stop 0 -forceexit $?
现在执行
./MyFirstJob-startup.sh
可以试着访问http://192.168.xx.xxx:8001,如果没有问题的话是可以访问的,虽然返回的是一个空白网页,然后可以访问http://192.168.xx.xxx:8001/manager,用户名和密码就是tomcat-user.xml配置的,也就是deploy中需要配置的用户名密码,在返回的页面上也可以看见deploy功能,至此,我也终于明白了jekins的deploy插件是如何工作的。其实原理和manager下面提供的这个deploy功能一样,只是jenkins通过deploy的插件去访问http://192.168.xx.xxx:8001,然后根据MyFirstJob-startup.sh获得项目指向路径,将war包发送到相应路径
CATALINA_BASE="/home/tomcat/apache-tomcat/MyFirstJob