posts - 2, comments - 27, trackbacks - 0, articles - 60
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
在网上看到很多关于使用Jenkins构建持续集成环境的文章,在有空的时候也希望尝试一下,这样可以在测试服务器上看到提交的最新版本

1.下载安装Jenkins

可以在http://mirrors.jenkins-ci.org上下载安装包,也可以选择在官网(https://jenkins.io)上下载war包(http://mirrors.jenkins.io/war-stable/latest/jenkins.war)或是安装包(http://mirrors.jenkins-ci.org/windows/jenkins-2.38.zip),写这篇文章时最新版本为2.38。如果选择安装包方式,下载后安装即可,安装完成后会自动启动浏览器向导,根据提示操作完成安装
本机下载安装包,安装到C:\Jenkins,如下配置也是基于此目录进行,下载及安装过程截图如下

选择Download Jenkins

下拉选择相应的操作系统版本,也可以直接下载war包,本文下载Windows版本的安装包,安装过程指定安装目录即可,安装完成后,会自动启动浏览器进行配置

根据页面提示,在文件中找到密码填入

选择插件,本例选择第二项,自己定义插件,打开第二项里的默认选择和推荐插件一样,如果不做修改,就相当于选择推荐插件安装

安装完成后,设置管理员账号

保存结束安装

点击开始进入Jenkins界面

2.启动Jenkins

Jenkins默认工作目录会在当前用户目录下创建.jenkins目录,也可以通过设置环境变量来修改,例如:
set JENKINS_HOME=C:\jenkins
然后重新启动jenkins,可以放在与安装目录不同的地方
进入安装目录C:\Jenkins,用命令行方式启动
java -jar jenkins.war
默认端口为8080,如果需要指定端口,可以使用如下参数指定,如指定端口为9000
java -jar jenkins.war --httpPort=9000
也可以修改目录下的jenkins.xml配置文件,将其中的httpPort修改即可
<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>

3.部署应用到Jenkins

之前的工程是基于Tomcat+Eclipse开发的,工程不是用Maven管理的,后面就对工程进行了改造,用Ant编译,添加了build.xml文件,在Ant中需要找到Tomcat目录,为了灵活一点,在系统里添加了Tomcat的环境变量CATALINA_HOME,以及Ant环境的安装,这是对原有工程的改造,如果新的工程采用Maven方式的话,应该会没有这么麻烦,附上build.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<project basedir="." default="build" name="xi">
    <property environment="env"/>
    <property name="tomcat.home" value="${env.CATALINA_HOME}" />
    <property name="tomcat.lib" value="${env.CATALINA_HOME}/lib" />
    <property name="web.root" value="${env.CATALINA_HOME}/webapps"/>
    <property name="ant.home" value="${env.ANT_HOME}" />
    <property name="debuglevel" value="source,lines,vars"/>
    <property name="target" value="1.7"/>
    <property name="source" value="1.7"/>
    <property name="webRoot.dir" value="${basedir}/WebContent" />
    <property name="src.dir" value="${basedir}/src" />
    <property name="lib.dir" value="${webRoot.dir}/WEB-INF/lib" />  
    <property name="log.file" value="${tomcat.home}/webapps/log.info"/> 

    <tstamp> 
        <format property="build.time" pattern="yyyy-MM-dd HH:mm:ss" /> 
    </tstamp>


    <path id="prj.classpath">
        <pathelement location="build/classes"/>
        <fileset dir="${tomcat.lib}">  
            <include name="*.jar" />  
        </fileset>
        <fileset dir="${lib.dir}">  
            <include name="*.jar" />  
        </fileset>
    </path>
    <path id="tomcat.classpath">
        <fileset dir="${tomcat.lib}">  
            <include name="*.jar" />  
        </fileset>
        <fileset dir="${tomcat.home}/bin">  
            <include name="*.jar" />  
        </fileset>
    </path>

    <target name="init">
        <echo message="---------- init ----------"></echo>
        <mkdir dir="build/classes"/>
        <copy includeemptydirs="false" todir="build/classes">
            <fileset dir="src">
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
    </target>
    
    <target name="clean">
        <echo message="---------- clean ----------"></echo>
        <delete dir="build/classes"/>
        <delete file="build/${ant.project.name}.war"></delete>
    </target>

    <target name="compile" depends="init">
        <echo message="${ant.project.name}: ${ant.file}"/>
        <javac debug="true" debuglevel="${debuglevel}" destdir="build/classes" includeantruntime="false"  encoding="UTF-8">
            <src path="src"/>
            <classpath refid="prj.classpath"/>
        </javac>
        <delete file="build/classes/gen-conf.xml"/>
    </target>

    <target name="build" depends="compile" description="make war">
        <war destfile="build/${ant.project.name}.war" basedir="WebContent" webxml="WebContent/WEB-INF/web.xml">
            <!-- lib dir="${lib.dir}"></lib -->
            <classes dir="${basedir}/build/classes"></classes>
        </war>
    </target>

    <target name="deploy" depends="build" description="deploy to tomcat"> 
        <echo message="----------deploy to tomcat----------"></echo>
        <delete file="${tomcat.home}/webapps/${ant.project.name}.war" /> 
        <delete dir="${tomcat.home}/webapps/${ant.project.name}" /> 
        <copy file="build/${ant.project.name}.war" todir="${tomcat.home}/webapps" /> 
    </target>

    <target name="undeploy" description="deploy to tomcat"> 
        <echo message="---------- undeploy project ----------"></echo>
        <delete file="${tomcat.home}/webapps/${ant.project.name}.war" /> 
        <delete dir="${tomcat.home}/webapps/${ant.project.name}" /> 
    </target> 

    
</project>
这样写是为了在Jenkins里调用Ant完成编译和部署的工作。
在Jenkins里创建项目,当前选择的是自由项目,写好项目名称,后续就是对项目进行配置,如果不希望保留过多的旧构建,可以设置丢弃。另外还需要获取源码的服务器,默认支持CVS和Subversion,也可以通过插件支持Git,因当前项目托管于SVN,配置如下图

后面是如何触发的配置,如下设置为每天6:30进行构建,每一个小时检查一下源码,主要是获取到代码后的动作设置

在动作设置里用Windows的批处理方式进行,原本考虑在服务器上做一个批处理,由Jenkins调用,经测试需要用绝对路径,不知是不是某个地方没配置好,后来就改用这种方式,对服务进行启动停止控制,对工程进行部署
经测试,此方式可以用,当前用来解决Tomcat+Eclipse环境下的工程自动构建问题,写在这个地方做个记录,如果有机会,尝试一下Maven,看看是不是要简单点

只有注册用户登录后才能发表评论。


网站导航: