Jenkins安装 下载jenkins.war包,运行java -jar jenkins.war,即可访问http://localhost:8080/访问jenkins。 或者将jenkins.war包放在Tomcat的Webapp下,启动Tomcat,访问http://localhost:8080/jenkins/。 本例产用后者。 1. 在首页选择系统管理,再右侧页面中选择管理插件。 在可选插件中选择要安装的插件,下表为本次测试中已安装的插件,有些为默认已安装的插件。
插件 名称 版本 启用 Pinned
|
mailer | 1.4 | true | false | external-monitor-job | 1.1 | true | false | ldap | 1.1 | true | false | pam-auth | 1.0 | true | false | javadoc | 1.0 | true | false | maven-plugin | 1.499 | true | false | ant | 1.1 | true | false | analysis-core | 1.48 | true | false | checkstyle | 3.32 | true | false | cvs | 1.6 | true | false | deploy | 1.9 | true | false | jquery | 1.7.2-1 | true | false | junit-attachments | 1.3 | true | false | ssh-slaves | 0.22 | true | false | subversion | 1.39 | true | false | translation | 1.8 | true | false | email-ext | 2.25 | true | false | | 2.进入jenkins首页,选择新建JOB,填写一个JOB名称,选择“构建一个自由风格的软件项目”。 然后进入配置页面,也可以首页选择项目,然后选择配置进入此页面。 本例的配置如下: 1) 源码管理选择Subversion Repository Url:https://localhost/svn/Diary/trunk/Diary 2) 构建触发器 选择Poll SCM 日程表:* * * * * (表示每分钟都比较,有更改就构建) 3) 构建 增加构建步骤:Invoke Ant Targets:(什么也没写,默认执行根目录下的build.xml) 4) 构建后操作 a. Publish Checkstyle analysis results Checkstyle results:output/diary/checkstyle/checkstyle_report.xml b. Publish JUnit test result report Test report XMLs:output/diary/test/data/*.xml 保留长的标准输出/错误 勾选 c. Publish Javadoc Javadoc directory:output/diary/docs d.Deploy war/ear to a container WAR/EAR files:output/diary/diary-1.0.0.war Container:Tomcat 6.x Manager user name:admin Manager password:***** Tomcat URL:http://localhost:8080 (此处要配置Tomcat的角色和用户: 在Tomcat的安装目录下,找到conf/tomcat-users.xml,修改内容如下: <role rolename="tomcat"/> <role rolename="role1"/> <role rolename="manager"/> <role rolename="admin"/> <user username="admin" password="admin" roles="admin,manager"/> <user username="tomcat" password="tomcat" roles="tomcat"/> <user username="both" password="tomcat" roles="tomcat,role1"/> <user username="role1" password="tomcat" roles="role1"/> ) e. Editable Email Notification Project Recipient List:要发送的邮件,可多个用逗号隔开 (此处要配置邮件服务,选择系统管理->系统设置: Jenkins Location Jenkins URL:http://localhost:8080/jenkins/ 配置邮件通知 也可以Extended E-mail Notification中选择Override Global Settings覆盖的邮件通知。 在测试过程中,邮件通知中没有“发送者的邮箱地址”这一项,导致邮件一直不能发送,选择了Extended E-mail Notification中的Override Global Settings,在这里填写信息才将邮件发送成功。 ) 附: build.xml,增加War包:
001 | <?xml version= "1.0" encoding= "UTF-8" ?> |
002 | <project name= "diary" default= "total" > |
007 | < format property= "build.latest.time" pattern= "HH:mm:ss" /> |
010 | <property name= "src.dir" location= "src" /> |
012 | <property name= "web.dir" location= "WebContent" /> |
018 | <property name= "build.dir" location= "build/classes" /> |
021 | <property name= "build.output" location= "output" /> |
023 | <property name= "build.output.dir" location= "${build.output}/diary" /> |
026 | <property name= "build.output.doc.dir" location= "${build.output.dir}/docs" /> |
029 | <property name= "test.dir" location= "test" /> |
031 | <property name= "build.output.test.dir" location= "${build.output.dir}/test" /> |
033 | <property name= "build.output.test.data.dir" location= "${build.output.test.dir}/data" /> |
036 | <property name= "build.output.checkstyle.dir" location= "${build.output.dir}/checkstyle" /> |
038 | <property name= "checkstyle.xml" location= "${build.output.checkstyle.dir}/checkstyle_checks.xml" /> |
040 | <property name= "checkstyle.xsl" location= "${build.output.checkstyle.dir}/checkstyle-frames.xsl" /> |
043 | <property name= "build.output.log" location= "${build.output}/output.log" /> |
045 | <property name= "build.output.log.verbose" location= "${build.output}/output_verbose.log" /> |
050 | <property file = "${src.dir}/base.properties" /> |
052 | <property name= "build.output.requires.dir" location= "${build.output.dir}/requires" /> |
054 | <fileset id = "compile.jar" dir = "${lib.dir}" > |
055 | <include name= "commons-lang-2.4.jar" /> |
059 | <path id = "compile.classpath" > |
060 | <fileset refid= "compile.jar" /> |
063 | <path id = "test.classpath" > |
064 | <path refid= "compile.classpath" /> |
065 | <pathelement location= "${lib.dir}/junit-4.10.jar" /> |
066 | <pathelement location= "${build.dir}" /> |
069 | <path id = "checkstyle.classpath" > |
070 | <pathelement location= "${lib.dir}/checkstyle-5.6-all.jar" /> |
074 | <!-- 记录日志,日志保存到文件中 --> |
075 | <record name= "${build.output.log}" append= "no" /> |
077 | <record name= "${build.output.log.verbose}" append= "no" loglevel= "verbose" /> |
079 | <target name= "total" depends= "zip,war" description= "构建完成" > |
080 | < echo >${build.output.log.datetime}构建完成!</ echo > |
083 | <target name= "war" depends= "createjar,javadoc" description= "生成War" > |
084 | <war destfile= "${build.output.dir}/${project.name}-${project.version}.war" webxml= "${webinf.dir}/web.xml" duplicate= "fail" > |
085 | <fileset file = "${web.dir}/*.jsp" /> |
086 | <lib dir = "${lib.dir}" > |
087 | <include name= "commons-lang-2.4.jar" /> |
089 | <classes dir = "${build.dir}" > |
090 | <include name= "diary/**/*" /> |
091 | <include name= "${build.dir}/test.property" /> |
094 | < echo >${build.output.log.datetime}生成War完成!</ echo > |
097 | <target name= "zip" depends= "createjar,javadoc" description= "生成Zip" > |
098 | <zip destfile= "${build.output.dir}/${project.name}-core-${project.version}.zip" duplicate= "preserve" > |
099 | <zipfileset dir = "${build.output.dir}/docs" prefix= "docs" /> |
100 | <zipfileset dir = "${build.output.dir}/requires" prefix= "requires" /> |
101 | <zipfileset file = "${build.output.dir}/*.jar" /> |
103 | < echo >${build.output.log.datetime}生成Zip完成!</ echo > |
106 | <target name= "createjar" depends= "test" description= "生成Jar" > |
107 | <manifest file = "${build.output.dir}/MANIFEST.MF" encoding= "utf-8" > |
109 | <section name= "${project.name}" > |
114 | <jar destfile= "${build.output.dir}/${project.name}-core-${project.version}.jar" duplicate= "preserve" compress= "false" manifestencoding= "utf-8" manifest= "${build.output.dir}/MANIFEST.MF" > |
115 | <fileset dir = "${build.dir}" > |
116 | <exclude name= "test/**/*" /> |
117 | <exclude name= "test" /> |
118 | <exclude name= "checkstyle_checks.xml" /> |
119 | <exclude name= "checkstyle-frames.xsl" /> |
120 | <exclude name= "checkstyletask.properties" /> |
121 | <exclude name= "sun_checks.xml" /> |
122 | <exclude name= "checkstyle_checks.xml" /> |
123 | <exclude name= "base.properties" /> |
126 | <copy todir= "${build.output.requires.dir}" > |
127 | <fileset refid= "compile.jar" /> |
129 | < echo >${build.output.log.datetime}生成Jar完成!</ echo > |
132 | <target name= "javadoc" depends= "test" description= "生成JavaDoc" > |
134 | sourcepath= "${src.dir}" |
135 | destdir= "${build.output.doc.dir}" |
136 | packagenames= "diary.*" |
139 | windowtitle= "${project.name}" |
141 | <classpath refid= "compile.classpath" /> |
143 | < echo >${build.output.log.datetime}生成JavaDoc完成,详情可查看${build.output.doc. dir }/index.html!</ echo > |
146 | <target name= "test" depends= "compilesrc,compiletest" description= "批量测试,并生成html" > |
147 | <junit printsummary= "false" haltonfailure= "false" errorProperty= "test.failed" failureProperty= "test.failed" > |
148 | <classpath refid= "test.classpath" /> |
149 | <formatter type = "brief" usefile= "false" /> |
150 | <formatter type = "xml" /> |
151 | <!-- 在testcase定义的情况下,单独测试testcase --> |
152 | < test name= "${testcase}" todir= "${build.output.test.data.dir}" if = "testcase" /> |
154 | <batchtest todir= "${build.output.test.data.dir}" unless= "testcase" > |
155 | <fileset dir = "${build.dir}" > |
156 | <include name= "**/*Test.class" /> |
160 | <junitreport todir= "${build.output.test.data.dir}" > |
161 | <fileset dir = "${build.output.test.data.dir}" > |
162 | <include name= "TEST-*.xml" /> |
164 | <report format = "frames" todir= "${build.output.test.dir}" /> |
166 | <fail if = "test.failed" > |
167 | ${build.output.log.datetime}批量测试,并生成html失败,详细可查看${build.output. test . dir }/index.html |
169 | < echo >${build.output.log.datetime}批量测试,并生成html完成,详细可查看${build.output. test . dir }/index.html!</ echo > |
173 | <javac srcdir= "${test.dir}" destdir= "${build.dir}" includeAntRuntime= "false" encoding= "UTF-8" > |
174 | <include name= "**/*.java" /> |
175 | <classpath refid= "test.classpath" /> |
180 | <target name= "copytest" depends= "init" description= "复制测试代码资源文件到编译目录" > |
181 | <fileset dir = "${test.dir}" > |
182 | <exclude name= "**/*.java" /> |
184 | < echo >${build.output.log.datetime}复制测试代码资源文件到编译目录完成!</ echo > |
187 | <target name= "compilesrc" depends= "checkstyle,copysrc" description= "编译源代码文件" > |
188 | <javac srcdir= "${src.dir}" destdir= "${build.dir}" includeAntRuntime= "false" encoding= "UTF-8" > |
189 | <include name= "**/*.java" /> |
190 | <classpath refid= "compile.classpath" /> |
192 | < echo >${build.output.log.datetime}编译源代码文件完成!</ echo > |
195 | <target name= "copysrc" depends= "init" description= "复制源代码资源文件到编译目录" > |
196 | <copy todir= "${build.dir}" includeemptydirs= "false" > |
197 | <fileset dir = "${src.dir}" > |
198 | <exclude name= "**/*.java" /> |
201 | < echo >${build.output.log.datetime}复制源代码资源文件到编译目录完成!</ echo > |
204 | <target name= "checkstyle" depends= "init" description= "用Checkstyle校验源代码" > |
207 | failOnViolation= "false" |
208 | failureProperty= "checkstyle.failed" |
209 | config= "${src.dir}/sun_checks.xml" > |
210 | <fileset dir = "${src.dir}" includes= "**/*.java" /> |
211 | <formatter type = "plain" /> |
212 | <formatter type = "xml" toFile= "${build.output.checkstyle.dir}/checkstyle_report.xml" /> |
214 | <xslt style= "${checkstyle.xsl}" |
215 | in = "${build.output.checkstyle.dir}/checkstyle_report.xml" |
216 | out= "${build.output.checkstyle.dir}/checkstyle_report.html" > |
218 | < echo >${build.output.log.datetime}用Checkstyle校验源代码完成,详细信息查看${build.output.checkstyle. dir }/checkstyle_report.html!</ echo > |
221 | <target name= "init" depends= "clean,cleanoutput" description= "创建输出目录" > |
222 | < mkdir dir = "${build.dir}" /> |
223 | < mkdir dir = "${build.output.dir}" /> |
224 | < mkdir dir = "${build.output.doc.dir}" /> |
225 | < mkdir dir = "${build.output.test.dir}" /> |
226 | < mkdir dir = "${build.output.test.data.dir}" /> |
227 | < mkdir dir = "${build.output.checkstyle.dir}" /> |
228 | <copy todir= "${build.output.checkstyle.dir}" overwrite= "true" > |
229 | <fileset dir = "${src.dir}" > |
230 | <include name= "checkstyle-frames.xsl" /> |
231 | <include name= "checkstyle_checks.xml" /> |
237 | < echo >${build.output.log.datetime}输出目录创建完成!</ echo > |
240 | <target name= "clean" description= "清理编译目录" > |
241 | <delete includeemptydirs= "true" > |
242 | <fileset dir = "${build.dir}" > |
243 | <include name= "**/*" /> |
246 | < echo >${build.output.log.datetime}编译目录清理完成!</ echo > |
249 | <target name= "cleanoutput" description= "清理输出目录" > |
250 | <delete includeemptydirs= "true" > |
251 | <fileset dir = "${build.output}" > |
252 | <exclude name= "output*.log" /> |
255 | < echo >${build.output.log.datetime}输出目录清理完成!</ echo > |
输出: 构建出错后的输出,会发送邮件到指定邮箱:
03 | Started by user anonymous |
04 | Building in workspace C:\Users\xujing\.jenkins\jobs\Diary\workspace |
08 | No emails were triggered. |
09 | [workspace] $ cmd.exe /C '"ant.bat && exit %%ERRORLEVEL%%"' |
10 | Buildfile: C:\Users\xujing\.jenkins\jobs\Diary\workspace\build.xml |
13 | [ echo ] [2013-01-21 15:50:49] 编译目录清理完成! |
16 | [ echo ] [2013-01-21 15:50:49] 输出目录清理完成! |
19 | [ mkdir ] Created dir : C:\Users\xujing\.jenkins\jobs\Diary\workspace\output\diary |
20 | [ mkdir ] Created dir : C:\Users\xujing\.jenkins\jobs\Diary\workspace\output\diary\docs |
21 | [ mkdir ] Created dir : C:\Users\xujing\.jenkins\jobs\Diary\workspace\output\diary\ test |
22 | [ mkdir ] Created dir : C:\Users\xujing\.jenkins\jobs\Diary\workspace\output\diary\ test \data |
23 | [ mkdir ] Created dir : C:\Users\xujing\.jenkins\jobs\Diary\workspace\output\diary\checkstyle |
24 | [copy] Copying 2 files to C:\Users\xujing\.jenkins\jobs\Diary\workspace\output\diary\checkstyle |
25 | [ echo ] [2013-01-21 15:50:49] 输出目录创建完成! |
28 | [checkstyle] Running Checkstyle 5.6 name= "code" >控制台输出 |
30 | Started by user anonymous |
31 | Building in workspace C:\Users\xujing\.jenkins\jobs\Diary\workspace |
35 | No emails were triggered. |
36 | [workspace] $ cmd.exe /C '"ant.bat && exit %%ERRORLEVEL%%"' |
37 | Buildfile: C:\Users\xujing\.jenkins\jobs\Diary\workspace\build.xml |
40 | [ echo ] [2013-01-21 16:21:25] 编译目录清理完成! |
43 | [ echo ] [2013-01-21 16:21:25] 输出目录清理完成! |
46 | [ mkdir ] Created dir : C:\Users\xujing\.jenkins\jobs\Diary\workspace\output\diary |
47 | [ mkdir ] Created dir : C:\Users\xujing\.jenkins\jobs\Diary\workspace\output\diary\docs |
48 | [ mkdir ] Created dir : C:\Users\xujing\.jenkins\jobs\Diary\workspace\output\diary\ test |
49 | [ mkdir ] Created dir : C:\Users\xujing\.jenkins\jobs\Diary\workspace\output\diary\ test \data |
50 | [ mkdir ] Created dir : C:\Users\xujing\.jenkins\jobs\Diary\workspace\output\diary\checkstyle |
51 | [copy] Copying 2 files to C:\Users\xujing\.jenkins\jobs\Diary\workspace\output\diary\checkstyle |
52 | [ echo ] [2013-01-21 16:21:25] 输出目录创建完成! |
55 | [checkstyle] Running Checkstyle 5.6> |
59 | <li>Diary.zip (3.1 MB)</li> |
73 | <center><div style= "margin:10px 0 25px 0" > |
74 | <script type = "text/javascript" > |
75 | /*500*200,创建于2013-4-2 07net01 文章内部下*/ |
76 | var cpro_id = "u1251111" ; |
|