Jeninsk部署及使用

基础环境

Centos7.3 x86_64 SVN JDK1.8 MySQL 5.7.18 Jenkins 2.65 (https://jenkins.io/download/) ANT 1.9.4 (http://archive.apache.org/dist/ant/binaries/)

下载

https://jenkins.io/download/

安装

yum部署

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
yum install jenkins -y

rpm部署

rpm -ivh https://pkg.jenkins.io/redhat/jenkins-2.65-1.1.noarch.rpm

#默认路径:/var/lib/jenkins/

war包部署

nohup java -jar jenkins.war --httpPort=8080 &

#默认路径:/root/.jenkins/

Jenkins基础配置

查看并修改密码
从/var/lib/jenkins/secrets/initialAdminPassword
安装推荐插件

如果你看到了offline报错,是因为jenkins会ping www.google.com,如果ping不通,就会报offline,在jenkins设置一个hosts,把google域名指向jenkins设备就解决了

配置环境变量
  • 些变量会在你编译项目时用到
  • Global Tool Configuration中进行设置
  • 增加JDK环境变量(将jdk等文件上传到服务器指定位置)
  • 增加ANT环境变量(同JDK)

增加插件

  • 安装svn插件(系统管理-->管理插件-->可用插件-->安装SVN Publisher plugin
  • 增加认证(Credentials-->System-->Global credentials-->Add Credentials-->输入SVN的用户名密码

新建项目

  • 新建-->构建一个自由软件风格的软件项目
  • 输入项目名称
  • 选择jdk版本
  • 配置源码管理(链接,认证)

注意Ignore externals,如果项目连接着别的项目代码,请取消选择

  • 配置构建,配置ANT,选择之前添加的版本
  • 保存后构建

build.xml请看附件

知识点

  • Use‘svn update’ as much as possible

    第一次发布的时候,会把工作目录下的所有文件清空,然后check-out一份完整的项目到工作目录下; 以后更新的时候,不会判断已有文件是否在svn里存在。比如工作目录下的文件123在svn里不存在,那么更新的时候不会删除123。 不会判断工作目录下的文件是否被改动,只会判断svn是否有新版本需要更新。比如工作目录下的文件zzz.txt内容为zzz,svn上的zzz.txt内容为空,如果svn上zzz.txt没有新版本,则在更新的时候不会更新zzz.txt,也就是说如果手动修改了工作目录下的文件,如果此文件在svn上没有出现新版本,就不会更新。一旦svn上的zzz.txt有新版本后就会更新工作目录的zzz.txt,这时工作目录下会生成如下几个文件:zzz.txt、zzz.txt.mine、zzz.txt.r223、zzz.txt.r224,其中zzz.txt.r223为svn上老版本、zzz.txt.r224为svn上新版本、zzz.txt.mine为工作目录上的zzz.txt的副本、zzz.txt记录了文件变化。 svn上删除了文件,更新的时候,工作目录里的此文件也会被删除。但是如上例中的zzz.txt手动修改过,已经和svn上的不一样了,这时将不会被删除。

  • Alwayscheck out a fresh copy

    第一次发布的时候,会把工作目录下的所有文件清空,然后check-out一份完整的项目到工作目录下; 每一次更新的时候,都会先清除工作目录下的所有文件,然后重新check-out一份完整的项目到工作目录下。

  • Emulateclean checkout by first deleting unversioned/ignored files,then ‘svn update’

    第一次发布的时候,会把工作目录下的所有文件清空,然后check-out一份完整的项目到工作目录下; 以后更新的时候会判断工作目录下的文件是否在svn里存在,如果不存在则删除,如果存在且有新版本则更新。 会判断工作目录下的文件是否被改动,不管有没有新版本,都会还原为svn上的最新版本。 svn上删除了文件,更新的时候,工作目录里的此文件也会被删除。

  • Use‘svn update’ as much as possible,with ‘svn revert’ before update

    第一次发布的时候,会把工作目录下的所有文件清空,然后check-out一份完整的项目到工作目录下; 以后更新的时候不会判断工作目录下的文件是否在svn里存在。 会判断工作目录下的文件是否被改动,不管有没有新版本,都会还原为svn上的最新版本。 svn上删除了文件,更新的时候,工作目录里的此文件也会被删除。

  • 该内容引用自http://zhangxingnan.blog.51cto.com/3241217/1427000/

  • 感谢《zhangxingnan》

遇到的问题

svn引用外部项目,导致文件下载不完整

在配置项目时,去掉“Ignore externals”的勾选,即可将svn上引用的外部项目也一并checkout。在配置项目时,去掉“Ignore externals”的勾选,即可将svn上引用的外部项目也一并checkout。详见http://blog.csdn.net/wudj810818/article/details/51076353 感谢《5后's Blog》

Jenkins构建项目时,JAVA_HOME is not defined correctly

在系统配置,Global Tool Configuration中创建JAVA_HOME变量,重新构建。 该变量用于编译项目,和系统中的JDK1.8没有关系。

附件

配置Build.xml文件

<?xml version="1.0" encoding="UTF-8"?>  
<project name="ding_code" default="war" basedir=".">  
    <property environment="env" />  
    <property name="webapp.name" value="ding_code" />  
    <property name="catalina.home" value="/app/tomcat-7.0.77" />  
    <property name="dist.dir" value="/data/ding_build_file/ding_code" />  
    <property name="ant.dir" value="/app/apache-ant-1.9.4" />  
    <property name="webRoot.dir" value="${basedir}/WebRoot" />  
    <property name="src.dir" value="${basedir}/src" />  
    <property name="config.dir" value="${basedir}/produce_configure" />  
    <property name="lib.dir" value="${webRoot.dir}/WEB-INF/lib" />  
    <property name="build.dir" value="${basedir}/build" />  
    <!-- 使用eclipse jdt进行编译,而不使用JDK编译  -->  
    <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" />   

    <!-- 初始化classpath -->  
    <path id="project.classpath">  
        <fileset dir="${lib.dir}">  
            <include name="**/*.jar" />  
        </fileset>  
        <!-- 添加tomcat类路径 -->  
        <fileset dir="${catalina.home}/lib">  
            <include name="*.jar" />  
        </fileset>  
        <!-- ant lib包  -->  
        <fileset dir="${ant.dir}">  
            <include name="**/*.jar" />  
        </fileset>  
    </path>  

    <!-- get the source compile classpath in a printable form -->  
    <pathconvert pathsep="${line.separator}|   |-- "  
             property="echo.path.compile"  
             refid="project.classpath">  
    </pathconvert>  

    <!-- show classpath jars -->  
    <target name="print_classpath">  
        <echo message="|-- compile classpath"/>  
        <echo message="|   |"/>  
        <echo message="|   |-- ${echo.path.compile}"/>  
    </target>  


    <!-- 删除之前的目录结构 -->  
    <target name="clear" description="清理旧文件">  
        <delete dir="${build.dir}" />  
        <delete dir="${dist.dir}" />  
        <delete file="${catalina.home}/webapps/${webapp.name}.war" />  
        <delete dir="${catalina.home}/webapps/${webapp.name}" />  
    </target>  

    <!-- 创建目录结构 -->  
    <target name="init" depends="clear" description="创建初始化目录结构">  
        <mkdir dir="${build.dir}/classes" />  
        <mkdir dir="${dist.dir}" />  
    </target>  

    <!-- 编译java -->  
    <target name="compile" depends="init" description="编译java文件">  
        <echo message="begin compile..." />  
        <javac srcdir="${src.dir}" destdir="${build.dir}/classes"   
            includeantruntime="false" nowarn="on"   
            source="1.6" target="1.6" deprecation="true" debug="true"   
            encoding="UTF-8" classpathref="project.classpath"   
            >  
            <compilerarg line="-Xlint:unchecked" />  
            <!-- <classpath refid="project.classpath" /> -->  
        </javac>  
        <copy todir="${build.dir}/classes">  
            <fileset dir="${src.dir}">  
                <include name="**/*.xml" />  
                <include name="**/*.properties" />  
                <include name="**/*.sql" />
                <include name="**/*.txt" />
            </fileset>  
            <fileset dir="${config.dir}">  
                <include name="**/*.xml" />  
                <include name="**/*.properties" />  
                <include name="**/*.sql" />
                <include name="**/*.txt" />
            </fileset>  
        </copy>  
        <echo message="end compile..." />  
    </target>  

    <!-- 将class文件打成 jar包 -->  
    <!--    
        <target name="pack" depends="compile">   
            <jar jarfile="${build.dir}/${webapp.name}.jar">   
                <fileset dir="${build.dir}/classes">   
                    <include name="**/*.class"/>   
                </fileset>   
            </jar>   
        </target>   
    -->  

    <!-- 打成war包, 名称默认为 项目名 -->  
    <target name="war" depends="compile" description="将工程打成war包">  
        <echo message="begin war..." />  
        <war destfile="${dist.dir}/${webapp.name}.war" basedir="${webRoot.dir}"   
            webxml="${webRoot.dir}/WEB-INF/web.xml">  
            <lib dir="${lib.dir}" />  
            <classes dir="${build.dir}/classes" />  
            <fileset dir="${webRoot.dir}">  
                <include name="***.*" />  
            </fileset>  
        </war>  
        <echo message="end war..." />  
    </target>  

    <!-- copy war包 tomcat的deploy目录   
    <target name="deploy" depends="war" description="部署项目">  
        <echo message="begin deploy..." />  
        <copy file="${dist.dir}/${webapp.name}.war" todir="${catalina.home}/webapps" />  
        <echo message="end deploy..." />  
    </target>  
    -->

</project>

本文配置来源于http://blog.csdn.net/wangyajin333/article/details/47860577 感谢《王雅瑾

results matching ""

    No results matching ""