合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
### 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部署** ```shell 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部署** ```shell rpm -ivh https://pkg.jenkins.io/redhat/jenkins-2.65-1.1.noarch.rpm #默认路径:/var/lib/jenkins/ ``` **war包部署** ```shell nohup java -jar jenkins.war --httpPort=8080 & #默认路径:/root/.jenkins/ ``` #### Jenkins基础配置 ##### 查看并修改密码 ```shell 从/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 <?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 感谢《[王雅瑾](http://blog.csdn.net/wangyajin333)》