jenkins支持集成进阶

来源:互联网 发布:html5性能优化 编辑:程序博客网 时间:2024/06/08 06:22

Jenkins的启动方法有两种:

第一种是使用tomcat直接打开,就是把jenkins.war放入tomcat下的webapps目录下,当启动jenkins时,就会自动在webapps下建立jenkins目录。然后再浏览器的地址栏输入http://localhost:8080/jenkins另一种方法要确保系统中安装了jdk,并且配置了环境变量,检测方法就是在命令行输入java回车后有多行的命令符提示。直接在命令行输入java -jar jenkins.war即可启动jenkins,默认会运行在8080端口,切换到浏览器的地址栏输入http;//localhots:8080,localhost可以改成ip地址。
需要注意的是
1.Job名称千万不要用中文名称
2.创建Job名称时最好有个规划,因为我们最后会通过正则匹配自动将Job归类,例如, “项目前缀_一些说明-Job类型”这种方式。

分级符号概述了一个Job新近一次构建会产生的四种可能的状态: 

Successful:完成构建,且被认为是稳定的。

Unstable:完成构建,但被认为不稳定。

Failed:构建失败。

Disabled:构建已禁用。

注释 : jenkins启动方式:
首先,进入 .jenkins 目录(比如/home/jenkins/.jenkins)。先备份 config.xml 为 config.xml.bak,而后打开 config.xml 配置文件,修改“<useSecurity>true</useSecurity>”为“<useSecurity>false</useSecurity>”;同时把“<authorizationStrategy ...>...</authorizationStrategy>”配置删除。  重启之后我们会发现 Jenkins 已经无需登录了。然后,直接找到“系统管理”的“管理用户”菜单,把管理员的密码改回来!然后,用之前备份的 config.xml.bak 文件覆盖 config.xml 配置文件。再次重启 Jenkins,终于发现管理员又可以正常登录了。方法一  java -jar /app/jenkins/jenkins.war --daemon --httpPort=7000 --logfile=/app/jenkins/jenkins.log关闭CTRL +C方法二: linux定时任务启动后,关闭定时任务方法三: 启动和关闭均 写成脚本方法四:放入tomcat服务器中运行Jenkins

1. Jenkins不同job之间依赖关系的两种配置方式

参考:http://blog.csdn.net/itfootball/article/details/45060007

执行job A后, 执行JOB B
方法一: job B中配置(下游配置)


方法二: job A中配置(上游配置)



2. Jenkins不同job之间传递参数

需要插件:Parameterized Trigger Plugin插件
上游job A配置:


下游 JOB B:


3. Job中如何传递自定义变量

http://www.cnblogs.com/junneyang/p/5239480.html

4. 多个job之间的串并联

http://www.cnblogs.com/luodengxiong/p/5535218.html

5. shell脚本实现部署


自己写Shell脚本来停止容器、更新Web应用、然后再启动容器,其实,如果你懂点Shell,这种方法非常简单,而且这种方法非常稳定,因为每次直接杀JVM进程,直接避免了内存溢出的问题
http://blog.csdn.net/neutrojan/article/details/41854883

6. testng接入jenkins自动运行

http://blog.sina.com.cn/s/blog_68f262210102vx8o.html

7. 根据git仓库的变化来构建编译部署代码(配置触发器

注意:

验证jenkins如何自动构建

   修改下本地git仓库的代码commit push 到远程仓库, 2分钟的样子jenkins便会自动构建


在构建触发器下,设置构建频率和构建时间。
    Build periodically:周期进行项目构建(它不care源码是否发生变化),例如H 9-16/2 * * 1-5(周一到周五每两个小时构建一次)
    Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。例如H/15 * * * * (每15分钟检查一次源码变化)您可以指定一个定时作业表达式来定义Jenkins每隔多久检查一下您源代码仓库的变化。如果发现变化,就执行一次构建。例如,表达式中填写0,15,30,45 * * * *将使Jenkins每隔15分钟就检查一次您源码仓库的变化。
在"构建触发器"中选择"Build when a change is pushed to GitHub "和"Poll SCM ",这两项的作用分别是当GitHub有版本库更新时触发Jenkins进行构建和定期检查版本库是否有更新,如果有更新则触发Jenkins进行构建。这里要注意Schedule语法,例如"*/2 * * * *"表示每隔2分钟检查一次。
注释:
jenkins定时任务参考:
H 3 * *  1-5(每周一到周五,3点钟)H/15 * * * * (每15分钟)H/3 * * * 1-5(每周一到周五,每3分钟执行执行一次)20 3 * * *(每天早晨三点二十分执行)10,40 * * * *(每小时的10分,40分执行)00 15 * * 1,3,5(每周一,三,五的下午3:00)5,15,25,35,45,55 16,17,18 * * *(每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行)H */2 * * *(每两个小时)0 7-23/2,8 * * *(晚上11点到早上8点之间每两个小时和早上八点 )0 11 4 * 1-3(每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点)0 4 1 1 *(1月1日早上4点)H *  *  */2  *(没两周执行)
linux定时任务参考:
http://www.net130.com/CMS/Pub/special/special_IT_operation/2013_04_28_12184.htm
http://blog.csdn.net/hi_kevin/article/details/8983746
8. 构建与部署配置
构建工具使用备注antInvoke Ant,Ant Version选择你Ant配置的那个名字
注意不要选择default,那个选择了没有用。

Ps:如果你的构建脚本build.xml不在workspace根目录、或者说你的构建脚本不叫build.xml。那么需要在高级里设置Build File选项的路径,指明你的脚本。注意:是相对路径例如maven

新建一个Maven工程后,需要设置以下条目:

  1. 设置svn代码的下载路径
  2. 设置自动构造的日期
  3. 设置pom文件的路径
  4. 设置mvn命令的参数
  5. 设置post-build的动作
具体:

http://www.uml.org.cn/jchgj/201510221.asp 部署war包到tomcat1)Deploy to container Plugin
2)

在tomcat的conf目录配置tomcat-users.xml文件,在<tomcat-users>节点里添加如下内容:

<role rolename="manager-gui"/>

<role rolename="manager-script"/>

<role rolename="manager-jmx"/>

<role rolename="manager-status"/>

<user username="username" password="password" roles="manager-gui,manager-script,manager-jmx,manager-status"/>

引号里的username和password可以随便替换,待会要用的。

3) 选择Add post-build action,然后选择Deploy war/ear to a container

WAR/EAR files:war文件的存放位置,如:target/test.war 

          注意:相对路径,target前是没有/的。

Context path:访问时需要输入的内容,如ofCard访问时如下:http://192.168.x.x:8080/ofCard/如果为空,默认是war包的名字。

Container:选择你的web容器,如tomca 6.x

Manager user name:填入tomcat-users.xml配置的username内容

Manager password:填入tomcat-users.xml配置的password内容

Tomcat URL:填入http://192.168.x.x:8080/

Deploy on failure:构建失败依然部署,一般不选择

注意:虽然这种部署方法可能会导致tomcat加载时出现卡死的现象。但是也是最简单的部署方式。如果卡死了重启下就好了,将tomcat的java内存参数调高可以解决这个问题。

 节点配置Jenkins有个很强大的功能:分布式构建(在Jenkins的配置中叫做节点),分布式构建能够让同一套代码在不同的环境(如:Windows和Linux系统)中编译、测试等。而且Jenkins构建的代码和产物最后自动拷贝到主节点。

建议:所有Unix或者Windows机器的环境路径统一(如:JDK、Ant、Maven)

进入节点配置界面:

系统管理→管理节点→新建节点(左上角)


具体:

http://blog.csdn.net/wangmuming/article/details/22925961
并发测试;
http://blog.csdn.net/Danny_Yao/article/details/45826005 jettyhttp://www.cnblogs.com/daoxingsi/p/5362971.html
http://blog.csdn.net/jeremy_yangt/article/details/47105539
http://my.oschina.net/ozy/blog/532745 jenkins磁盘管理插件disk-usage pluginhttp://blog.csdn.net/testdeveloper/article/details/51734860    

9. 插件

插件用途配置

配置emalil




搜索email, 选择 Email Extension Plugin (或者Email Ext Recipients Column Plugin) 安装

1)插件支持jenkins 1.5以上的版本
2)具体配置
http://blog.csdn.net/jingjing029/article/details/50371104

cargo

cargo实现jenkins自动部署远程tomcat

代码质量

 Checkstyle Plugin

 Findbugs Plugin

 PMD Plugin

Warnings Plugin

Sonar

Sonar是一个代码质量管理系统,它的帮助文档开篇明义,提出了代码质量的七宗罪,总结的比较到位,不妨一看:

1.        Bug和隐藏Bug(Bugs and Potential Bugs

2.        违反编码规范(Coding Standards Breach

3.        复制粘贴(Duplications

4.        缺乏单元测试(Lack of Unit Tests

5.        恶劣的复杂度分布(Bad Distribution of Complexity

6.        意大利面式设计(Spaghetti Design

7.        注释不足或过多(Not Enough or Too Many Comments

            

10.代码覆盖率


代码覆盖率分析是 CPU,MEMORY 集中的处理 最好另建一个job

11.性能测试-jmeter

https://my.oschina.net/u/1377774/blog/168969
http://www.jdon.com/performance/automating-jmeter-tests-maven-jenkins.html

12.静态代码检查

插件

checkstyle:重复代码检查
PMD:pmd cpd”使用pmd的cpd功能检查重复代码.cpd是pmd的一个组件,用来检查重复代码
findbugs
jdepend
sonar


  • maven的checkstyle插件
原理:http://www.tuicool.com/articles/bUbYBr

<plugin>                  <groupId>org.apache.maven.plugins</groupId>                  <artifactId>maven-checkstyle-plugin</artifactId>                  <version>2.9.1</version>                <configuration>                <configLocation>/Users/.jenkins/workspace/custom_checkstyle.xml</configLocation>                 <encoding>UTF-8</encoding>              </configuration>            <executions>                <execution>                    <id>checkstyle</id>                    <phase>validate</phase>                    <goals>                        <goal>check</goal>                    </goals>                    <configuration>                        <failOnViolation>true</failOnViolation>                    </configuration>                </execution>            </executions>              </plugin>  
mvncheckstyle:checkstyle

mvn  jxr:jxr(maven-jxr-plugin:在生成站点时配置该插件,会以Web页面的形式将Java源代码展现出来 


checkstyle自定义的规则文件custom_checkstyle.xml(注意自定义文件格式必须正确)
参考:http://blog.csdn.net/sxdtzhaoxinguo/article/details/43449899
<span style="font-size: 16.4268px;"><strong><?xml version="1.0" encoding="UTF-8"?>    <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">    <!--       This configuration file was written by the eclipse-cs plugin configuration editor   -->    <!--        Checkstyle-Configuration: check        Description: none    -->    <module name="Checker">            <property name="severity" value="error"/>      <property name="charset" value="UTF-8"/>      <message key="general.exception" value="有一个异常 - {0}  "/>      <message key="general.fileNotFound" value="文件没找到!"/>                  <!--章节3.1.1  -->      <!-- 检查每个java package中是否有java注释文件,默认是允许一个package-info.java,      也可以通过allowLegacy属性配置允许package.html。此规则必须在<TreeWalker>标签外 -->      <module name="JavadocPackage" />        <module name="TreeWalker">          <property name="severity" value="error"/>            <property name="tabWidth" value="4"/>            <message key="general.exception" value="有一个异常 - {0}"/>                        <!--章节2.3  -->          <!-- 页宽-->          <!-- <module name="LineLength">                <property name="max" value="80"/>                <message key="maxLineLen" value="行字符数超过80个.违反编码规范2.3章节"/>            </module>    -->                  <!--章节2.4 -->          <!--操作符换行策略检查-->         <!--  <module name="OperatorWrap">              <property name="severity" value="error"/>              <property name="option" value="nl"/>              <property name="tokens" value="ASSIGN,BAND,BOR,DIV,EQUAL,GE,GT,LAND,LE,LOR,LT,MINUS_ASSIGN,MOD,MOD_ASSIGN,NOT_EQUAL,PLUS,PLUS_ASSIGN,QUESTION,STAR,STAR_ASSIGN"/>              <message key="line.after" value="''{0}'没有放在新行之首,违反编码规范2.4章节"/>          </module>       -->              <!--章节2.6  -->         <!--  <module name="ParenPad">              <property name="severity" value="error"/>              <property name="tokens" value="LPAREN,RPAREN,CTOR_CALL,METHOD_CALL,SUPER_CTOR_CALL"/>              <message key="ws.followed" value="''{0}'' 后面有空格,违反编码规范2.6章节"/>              <message key="ws.preceded" value="''{0}''前面有空格,违反编码规范2.6章节"/>          </module>       -->        <!-- <module name="TypecastParenPad">              <property name="severity" value="error"/>              <property name="tokens" value="RPAREN,TYPECAST"/>              <message key="ws.followed" value="''{0}''后面多一个空格,违反编码规范2.6章节"/>              <message key="ws.preceded" value="''{0}''前面多一个空格,违反编码规范2.6章节"/>          </module>       -->       <!--  <module name="WhitespaceAfter">              <property name="severity" value="error"/>              <property name="tokens" value="COMMA,SEMI"/>              <message key="ws.notFollowed" value="''{0}''后面多一个空格,违反编码规范2.6章节"/>          </module>              <module name="WhitespaceAround">              <property name="severity" value="error"/>              <property name="tokens" value="RCURLY,LITERAL_ASSERT,LITERAL_ASSERT,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE"/>              <property name="allowEmptyConstructors" value="true"/>              <property name="allowEmptyMethods" value="true"/>              <message key="ws.notPreceded" value="''{0}'' 关键字前少一个空格,违反编码规范2.6章节"/>              <message key="ws.notFollowed" value="''{0}'' 关键字后少一个空格,违反编码规范2.6章节"/>          </module>   -->                  <!--章节2.7 -->          <!-- 每行语句数量-->          <module name="OneStatementPerLine">              <!--模块的元数据类型设置,经过测试发现该标签没用-->              <metadata name="net.sf.eclipsecs.core.comment" value="Coding Problems-> Only one statement per line allowed" />                            <message key="multiple.statements.line" value="禁止一行有多句代码,违反编码规范2.7章节" />          </module>                    <!--章节2.8 -->          <!-- 每行变量声明数量-->         <!--  <module name="MultipleVariableDeclarations">                <property name="severity" value="error"/>                <message key="multiple.variable.declarations.comma" value="每一个变量的定义必须在它的声明处,且在同一行,违反编码规范2.8章节"/>                <message key="multiple.variable.declarations" value="每一行只能定义一个变量,违反编码规范2.8章节"/>            </module>        -->                      <!--章节2.9.1  -->          <!-- Checks the placement of right curly braces ('}') for  else, try, and catch tokens. The policy to verify is specified using property  option.               option: 右大括号是否单独一行显示              tokens: 定义检查的类型  -->           <!--  <module name="RightCurly">                  <property name="option" value="alone"/>               <property name="severity" value="error"/>                           </module>    -->                  <!--章节2.9.1  -->            <!-- 检查左侧大括号 左侧大括号必须放在前一行代码的行尾 -->          <!-- <module name="LeftCurly">              <property name="severity" value="error"/>              <message key="line.previous" value="左侧大括号没有放在前一行代码的行尾,违反编码规范2.9.1章节"/>          </module>    -->                  <!--章节2.9.2  -->          <!-- 检查代码块是否缺失大括号-->          <module name="NeedBraces">                <message key="needBraces" value="''{0}'' 结构没有用大括号 '''{}'''s,违反编码规范2.9.2章节"/>            </module>                     <!-- 章节3.2 -->          <!-- 对文件头的注释进行检查 -->                              <!--章节3.3  -->          <!--对类和接口的javadoc注释进行检查-->         <!--  <module name="JavadocType">              <property name="severity" value="error"/>              <message key="type.missingTag" value="Javadoc 类型的注释丢失 {0} 标签.违反编码规范3.3章节"/>              <message key="javadoc.missing" value="缺少 Javadoc 注释.违反编码规范3.3章节"/>              <message key="javadoc.unusedTagGeneral" value="未使用过的 Javadoc 标签.违反编码规范3.23章节"/>              <message key="javadoc.unusedTag" value="未使用过的 {0} 标签for ''{1}''.违反编码规范3.3章节"/>              <message key="type.tagFormat" value="Javadoc 类型标签 {0}必须匹配模式 ''{1}''.违反编码规范3.3章节"/>          </module>   -->                  <!--章节3.4,3.7  -->              <!--public protect private变量的注释进行检查-->         <!--  <module name="JavadocVariable">              <property name="severity" value="error"/>              <property name="scope" value="public"/>              <message key="javadoc.missing" value="变量注释:缺少Javadoc注释,违反编码规范3.4章节"/>          </module>           <module name="JavadocVariable">              <property name="severity" value="error"/>              <property name="scope" value="protected"/>              <message key="javadoc.missing" value="变量注释:缺少Javadoc注释,违反编码规范3.4章节"/>          </module>           <module name="JavadocVariable">              <property name="severity" value="error"/>              <message key="javadoc.missing" value="变量注释:缺少Javadoc注释,违反编码规范3.4章节"/>          </module>        -->                  <!--章节3.5  -->          <!-- 检查所有方法的javadoc,可以不声明RuntimeException -->         <!--  <module name="JavadocMethod">              <property name="allowUndeclaredRTE" value="true"/>              <!~~允许get set 方法没有注释~~>              <property name="allowMissingPropertyJavadoc" value="true"/>              <message key="javadoc.missing" value="方法注释:缺少Javadoc注释,违反编码规范3.5章节"/>          </module>        -->                  <!-- 命名规范 -->          <!--章节4.2 -->          <!-- 包名命名规范 -->         <!--  <module name="PackageName">                     <!~~ <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>  ~~>               <property name="format" value="^org\.neris\.[a-z]+(\.[a-z]+)+$"/>                    <message key="name.invalidPattern" value="包名 ''{0}'' 不符合org.neris.项目名.模块名,违反编码规范4.2章节"/>            </module>    -->                  <!--章节4.3,4.4  -->          <!-- 类的命名,匹配规则默认:(^[A-Z][a-zA-Z0-9]*$),必须以大写字母开始 -->          <module name="TypeName">                <property name="tokens" value="CLASS_DEF"/>              <message key="name.invalidPattern" value="类名 ''{0}''没有通过大驼峰命名法命名,具体名称应使用意义完整的英文描述,违反编码规范4.3章节"/>           </module>                        <!-- 接口命名,匹配规则默认:(^[A-Z][a-zA-Z0-9]*$),必须以大写字母开始 -->          <module name="TypeName">                <property name="tokens" value="INTERFACE_DEF"/>              <message key="name.invalidPattern" value="接口名 ''{0}''没有通过大驼峰命名法命名,具体名称应使用意义完整的英文描述,违反编码规范4.3章节"/>           </module>                    <!--章节4.6 -->          <!-- 方法名命名 -->              <module name="MethodName">                <property name="severity" value="error"/>                <property name="format" value="(^[a-z][a-zA-Z0-9]*$)"/>                <message key="name.invalidPattern" value="方法名 ''{0}''没有通过小驼峰命名法命名,具体名称应使用意义完整的英文描述.违反编码规范4.6章节"/>                 </module>                      <!--章节4.7 -->          <!-- 局部变量命名 -->          <module name="LocalVariableName">                     <property name="format" value="(^[a-z][a-zA-Z0-9]*$)"/>                <message key="name.invalidPattern" value="变量名 ''{0}''没有通过小驼峰命名法命名,具体名称应使用意义完整的英文描述.违反编码规范4.7章节"/>                </module>                     <!-- 局部的final变量,包括catch中的参数的检查 -->             <module name="LocalFinalVariableName" >                <property name="severity" value="error"/>              <message key="name.invalidPattern" value="变量名 ''{0}''没有通过小驼峰命名法命名,具体名称应使用意义完整的英文描述.违反编码规范4.7章节"/>          </module>                        <!-- 变量命名 -->          <module name="MemberName">                <message key="name.invalidPattern" value="变量名 ''{0}''没有通过小驼峰命名法命名,具体名称应使用意义完整的英文描述.违反编码规范4.7章节"/>            </module>                     <!-- 静态变量命名 -->          <module name="StaticVariableName">              <message key="name.invalidPattern" value="变量名 ''{0}''没有通过小驼峰命名法命名,具体名称应使用意义完整的英文描述.违反编码规范4.7章节"/>          </module>                        <!-- 数组变量命名 -->          <module name="ArrayTypeStyle">              <property name="severity" value="error"/>              <message key="array.type.style" value="数组定义没有采取int[] index这种方式,违反编码规范4.7.2章节"/>          </module>                     <!--章节4.8 -->          <!-- 常量命名-->          <module name="ConstantName">              <property name="severity" value="error"/>              <message key="name.invalidPattern" value="常量 ''{0}'' 常量名违反编码规范4.8章节."/>          </module>                    <!--章节5.1 -->          <!-- import语句不使用通配符 -->          <module name="AvoidStarImport">              <property name="severity" value="error"/>              <message key="import.avoidStar" value="引用包时不能使用*号.违反编码规范5.1章节"/>          </module>                          <!--章节5.2 -->          <!-- 魔法数检测-->          <module name="MagicNumber">                <property name="severity" value="error"/>                <message key="magic.number" value="''{0}'' 是一个魔法数(即常数).违反编码规范5.2章节"/>            </module>                    <!--章节5.4 -->          <!-- 多余的关键字,包含不适用this作为关键字 -->                            <!--章节5.5 -->          <!-- 重载父类方法 -->          <module name="MissingOverride">                 <message key="annotation.missing.override" value="重载方法缺少@Override,违反编码规范5.5章节" />              <message key="tag.not.valid.on" value="注释-> Javadoc {0}标签在这个位置是无效的." />          </module>                     <!--章节5.6 -->          <!--判断语句使用  -->          <module name="SimplifyBooleanExpression">              <property name="severity" value="error"/>              <message key="simplify.expression" value="存在布尔冗余,违法编码规范5.6章节."/>          </module>                    <!--章节5.7 -->          <!-- 检查switch语句是否忘记了default标签 -->          <module name="MissingSwitchDefault" >              <property name="severity" value="error"/>              <message key="missing.switch.default" value="switch 语句后边没有 default 语句.违法编码规范5.7章节"/>          </module>                    <!-- 检查switch语句中default标签的顺序 -->          <module name="DefaultComesLast">              <property name="severity" value="error"/>              <message key="default.comes.last" value="建议Default 放在 switch 语句的最后."/>          </module>                     <!--章节5.9 -->          <!-- 禁止使用System.out.println -->          <module name="Regexp">              <property name="format" value="System\.out\.println"/>               <property name="message" value="不要使用 System.out 与 System.out 进行控制台打印,应该使用日志工具类(如:log4j)进行统一记录或者打印,违法编码规范5.9章节"/>                <property name="illegalPattern" value="true"/>          </module>          <!-- 禁止使用System.err.println -->          <module name="Regexp">              <property name="format" value="System\.err\.println"/>               <property name="message" value="不要使用 System.out 与 System.err 进行控制台打印,应该使用日志工具类(如:log4j)进行统一记录或者打印,违法编码规范5.9章节"/>                <property name="illegalPattern" value="true"/>          </module>                   <!--章节5.10 -->          <!-- 不允许用main方法测试-->          <module name="UncommentedMain">                        </module>                    <!--章节5.11 -->          <!-- NeedBraces 检查是否应该使用括号的地方没有加括号              tokens: 定义检查的类型 -->            <module name="NeedBraces"/>                  </module>       </strong></span><strong style="font-size: 16.4268px; font-family: Arial, Helvetica, sans-serif;"></module> </strong>

  • pmd
命令:

mvn pmd:pmd

 <plugin>        <groupId>org.apache.maven.plugins</groupId>        <artifactId>maven-pmd-plugin</artifactId><configuration>           <!-- <rulesets>            <ruleset>/rulesets/braces.xml</ruleset>            <ruleset>/rulesets/naming.xml</ruleset>           </rulesets> --></configuration></plugin> 


13.jenkins 和sonar




安装说明
http://www.cnblogs.com/gao241/p/3190701.html
http://www.uml.org.cn/jchgj/201307251.asp
http://www.cnblogs.com/az19870227/archive/2013/04/03/2998351.html



  • Jenkins 执行失败自动重试

插件:Naginator Plugin
配置:http://www.cnblogs.com/honeybee/p/6343844.html

使用场景: 当一次执行失败或不稳定时,需要立即重试 来 确定 是否 真正有问题时

  • 定时配置

9点~23点,每20分钟执行一次: */20 09-23 * * *
每天7点执行: H 7 * * *







0 0