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/)
下载
安装
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上删除了文件,更新的时候,工作目录里的此文件也会被删除。
- 感谢《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 感谢《王雅瑾》