Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作。能够实现项目的自动构建、打包、测试、发布、构建结果通知、代码质量分析等等。jenkins官网地址为:https://wiki.jenkins-ci.org/display/JENKINS/Home

 Jenkins安装文件下载

 目前最新的版本是2.46.1版本

http://mirrors.jenkins-ci.org/下载适合的Jenkins版本。

http://mirrors.jenkins-ci.org/windows-stable/jenkins-2.46.1.zip

https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+as+a+Windows+service

把Jenkins 2.46.1版解压后,有两种运行方式:

   1. 运行 java -jar jenkins.war,采用内置jetty服务器。 

   2. 将下载的war包文件部署到 servlet 容器(比如tomcat),然后启动容器(推荐这种方式)。

redhat系统下安装流程:https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Red+Hat+distributions

Jenkins启动后访问 http://localhost:8989/jenkins (8989此端口可根据实际情况修改,tomcat默认的端口为8080),可打开如下界面表示安装成功

jenkins maven 更新依赖 jenkins maven配置_tomcat

第一次登陆需要输入管理员密码,密码在jenkins的安装后的.jenkins\secrets\initialAdminPassword文件夹,输入后点击Continue按钮,页面会调转到

jenkins maven 更新依赖 jenkins maven配置_tomcat_02

此时创建一个管理员账号和密码以及电子邮箱地址,然后点击Save and Finish进入,显示下图则表明jenkins启动成功

jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_03

主要系统配置:

系统管理-Global Tool Configuration

配置JDK

jenkins maven 更新依赖 jenkins maven配置_Jenkins_04

配置MAVEN

jenkins maven 更新依赖 jenkins maven配置_Jenkins_05


系统管理-系统设置

主目录设置,可以默认,在windows下面是 C:\Users\用户名\.jenkins,可手动设置到其他目录,比如F:\.jenkins等


jenkins maven 更新依赖 jenkins maven配置_Jenkins_06



jenkins Location设置:建议修改为IP加端口

jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_07



在这儿还可以配置MAVEN和EMAIL、GitHub、SonarQube等,待具体使用时再详细介绍。

新建一个项目JOB任务

  本文以一个Maven结构的java web工程为列:

 点击新建

jenkins maven 更新依赖 jenkins maven配置_tomcat_08




输入项目名

输入Job名,然后选择构建一个风格自由的软件项目,以及其他一些参数信息注意:如果有多个项目,建议工作空间+项目名称,例:C:\Users\admin\.jenkins\workspace\demo,demo为项目名称,也可取其它名称,这样会在工作空间下新建不同目录,以便区分不同项目

jenkins maven 更新依赖 jenkins maven配置_ci_09



jenkins maven 更新依赖 jenkins maven配置_ci_10

原码管理

在此我使用svn;填写Repository URL及Credentials,及svn的地址及用户信息,其中Credentials在首页Credentials选项新建;

注意:如果是Maven项目,且有多个模块,则Repository URL路径指向所有项目的根地址


jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_11

 

在首页Credentials选项新建,输入svn的账号和密码


jenkins maven 更新依赖 jenkins maven配置_tomcat_12



 构建触发器:

Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。我的配置如下:
*/5 * * * * (每5分钟检查一次源码变化)
Build periodically:周期进行项目构建(它不care源码是否发生变化),我的配置如下:
0 2 * * * (每天2:00 必须build一次源码)

注:Schedule的配置规则是有5个空格隔开的字符组成,从左到右分别代表:分 时 天 月 年。*代表所有,0 12,20 * * * 表示“在任何年任何月任何天的12和20点0分”进行构建。

 

jenkins maven 更新依赖 jenkins maven配置_tomcat_13

 


 项目构建:


jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_14

maven version : 选之前录入的maven;
Goals选项输入打包编译时要执行的命令,如:clean package/clean install;
POM选项选择pom文件所在的相对位置,如果有多个Maven模块,选择父级的pom.xml;


jenkins maven 更新依赖 jenkins maven配置_tomcat_15

保存,首页左侧 点击 立即构建 选项即可构建项目了。

 监控:


当任务一旦运行,您将会看到这个任务正在队列中的仪表板和当前工作主页上运行。这两种显示如下。

 

jenkins maven 更新依赖 jenkins maven配置_Jenkins_16

图29 主页监控(左),项目监控(右)

一旦构建完成后,完成后的任务将会有三个地方进行显示。

你可以在Jenkins的控制面板上看到它,如下图。

 

jenkins maven 更新依赖 jenkins maven配置_tomcat_17

图30 主页项目界面

 

在上面展示的截图中,您将注意到有两个图标描述当前作业的状态。S栏目代表着“最新构建状态”,W栏目代表着“构建稳定性”。Jenkins使用这两个概念来介绍一个作业的总体状况:

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

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

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

Failed:构建失败。

Disabled:构建已禁用。

 

jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_18

图31 构建状态界面

构建稳定性: 当一个Job中构建已完成并生成了一个未发布的目标构件,如果您准备评估此次构建的稳定性,Jenkins会基于一些后处理器任务为构建发布一个稳健指数 (从0-100 ),这些任务一般以插件的方式实现。它们可能包括单元测试(JUnit)、覆盖率(Cobertura )和静态代码分析(FindBugs)。分数越高,表明构建越稳定。下图中分级符号概述了稳定性的评分范围。任何构建作业的状态(总分100)低于80分就是不稳定的。

 

jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_19

图32 构建稳定性界面

你也可以在当前Job主界面上看到它,如下图左下部分

 

jenkins maven 更新依赖 jenkins maven配置_tomcat_20

图33 项目主界面

当前作业主页上还包含了一些有趣的条目。左侧栏的链接主要控制Job的配置、删除作业、构建作业。右边部分的链接指向最新的项目报告和构件。

通过点击构建历史(Build History)中某个具体的构建链接,您就能跳转到Jenkins为这个构建实例而创建的构建主页上。如下图

 

jenkins maven 更新依赖 jenkins maven配置_ci_21

图34 构建历史界面

如果你想通过视图输出界面来监控当前任务的进展情况。你可以单击Console Output(控制台输出)。如果工作已完成,这将显示构建脚本产生的静态输出;如果作业仍然在运行中,Jenkins将不断刷新网页的内容,以便您可以看到它运行时的输出。如下图:

 

jenkins maven 更新依赖 jenkins maven配置_tomcat_22

图35 控制台输出界面


 查看构建日志:


jenkins maven 更新依赖 jenkins maven配置_tomcat_23

日志信息:

 

jenkins maven 更新依赖 jenkins maven配置_tomcat_24


jenkins maven 更新依赖 jenkins maven配置_Jenkins_25

 构建成功!!!如报一下错误:


jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_26

解决方案:

(a)修改pom.xml文件

<build>
<finalName>demo</finalName>
</build>

添加<defaultGoal>install</defaultGoal>

即:

<build>
<defaultGoal>install</defaultGoal>
<finalName>demo</finalName>
</build>

(b)指定默认Goals


jenkins maven 更新依赖 jenkins maven配置_tomcat_27

 

clean install  -Dmaven.test.skip=true  #加入了跳过测试的代码

重新构建。

 部署项目:

构建后操作:


jenkins maven 更新依赖 jenkins maven配置_ci_28

 

 配置后保存,重新构建,其中demo是我web项目的名称,此处的http://localhost:8081,是部署demo项目的服务器和端口

target\demo.war,是构建后生成的war包,正常情况下打包成功后就会部署到tomcat下webapps目录下,如

**/*.war试试。


jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_29

构建成功后,即可登录项目验证:


jenkins maven 更新依赖 jenkins maven配置_ci_30

到此Jenkins部署就完成了!!!!!!!!!!!!!!

Jenkins自动部署配置

jenkins自动Deploy插件安装

要实现jenkins的自动部署,首先是要下载 Deploy to Container Plugin 插件(这个是支持将代码部署到tomcat容器的)

找到:插件管理 在“可选插件”界面

jenkins maven 更新依赖 jenkins maven配置_tomcat_31


jenkins maven 更新依赖 jenkins maven配置_tomcat_32

安装完之后,如果勾选了:安装完成后重启jenkins 那么会重启jenkins。

Tomcat服务器账号配置

另外还需要在被发布那台Tomcat设置相应的管理员账号和密码:

在tomcat的安装路径conf\tomcat-users.xml文件夹下新增


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

然后重启Tomcat,在jenkins的任务“增加构建后操作步骤”中选择“DePloy War/ear to container”,然后新增对应目标tomcat服务器的连接URL,登录名,密码,发布的war/ear包的原路径和tomcat的webapps下面的工程报名(

原war包名和部署后的工程名可不一致,比如之前是target目录下的demo.war文件,部署后可改名为demo2 )




jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_33

图28 远程部署配置界面

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

包的名字。

容器,如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的java内存参数调高可以解决这个问题。



Jenkins邮件配置

一、Jenkins内置默认的邮件通知配置


1、全局配置




jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_34



点击左边的“系统管理”菜单,选择右边的“系统设置”


jenkins maven 更新依赖 jenkins maven配置_ci_35



在系统设置中找到Jenkins Locaction项填入Jenkins URL和系统管理员邮件地址,系统管理员邮件地址一定要配置,否则发不了邮件通知。因为邮件通知都是由系统管理员的邮箱发出来的。


jenkins maven 更新依赖 jenkins maven配置_Jenkins_36



找到邮件通知项,填入SMTP服务器信息及用户名、密码等认证信息。( 此处使用SMTP用户名和密码需要特别注意的是如果是QQ和163等邮箱配置试密码 不是邮件用户名的密码 , 而是邮箱客户端授权码!!!网易邮箱客户端授权码设置链接 )


jenkins maven 更新依赖 jenkins maven配置_ci_37




配好以后勾选“通过发送测试邮件测试配置”


jenkins maven 更新依赖 jenkins maven配置_ci_38



填入接收测试邮件的地址,点击“Test configuration”。如果配置正确就会在下面显示 Email was successfully sent


jenkins maven 更新依赖 jenkins maven配置_ci_39



在测试接收邮箱就会收到由 Jenkins系统管理员的邮箱发出来的 一封测试邮件。说明邮箱通知确实已经配置正确并能够正常收发 Jenkins的 通知邮件了。有网友说如果配的发送邮箱是某个邮件服务商的比如163的邮件,接收邮箱也得要配相同邮件服务商163的才可以收到邮件,经过测试没有这种限制,只要是能够收发邮件随便配哪个邮件服务商126、163、QQ、189甚至公司邮件等的都可以收。


jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_40





2、项目配置


邮件通知的全局设置配好以后就可以在具体的项目中应用发送邮件通知了。



jenkins maven 更新依赖 jenkins maven配置_tomcat_41




在项目的设置中找到“增加构建后的操作步骤”,选择“E-mail Notifacation”通过E-mail通知。


jenkins maven 更新依赖 jenkins maven配置_ci_42




在Recipients中填入邮件通知接收者中,如果有多个接收者用空格分隔,可以发送邮件通知给多个相关的接收人。


jenkins maven 更新依赖 jenkins maven配置_Jenkins_43




如果配置没有问题,在构建出问题的时候都会有邮件通知到邮件通知接收者。




jenkins maven 更新依赖 jenkins maven配置_Jenkins_44





二、Email Extension Plugin插件配置邮件通知


1、全局配置


同样在点击左边的“系统管理”菜单,选择右边的“系统设置”,找到Extend E-mail Notification进行全局配置。


jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_45




同样填好SMTP Server的信息。点击“高级”进行SMTP鉴权的配置,配置发邮件人的用户名、密码等信息。


jenkins maven 更新依赖 jenkins maven配置_ci_46




默认收件人填需要发送邮件通知的人,如有多个用空格分隔


jenkins maven 更新依赖 jenkins maven配置_tomcat_47




点击最右下角的"Default Triggers ..."按钮设置默认的触发邮件通知的事件。


jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_48





根据实际情况勾选需要触发邮件通知的事件。


jenkins maven 更新依赖 jenkins maven配置_ci_49





保存全局的配置信息后到项目中进行项目的配置。




2、项目配置


进入到具体的项目配置界面点击“配置”,在配置界面点击“增加构建后操作步骤”,选择“Editable Email Notification”


jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_50




在设置中保存默认就可以了。


jenkins maven 更新依赖 jenkins maven配置_tomcat_51





可以在“Advanced Settings”中针对该项目进行个性化的配置。


jenkins maven 更新依赖 jenkins maven配置_ci_52





可以针对该项目定义该项目通知的收件人列表、主题、内容、附件等。


jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_53





设置完后点击保存。就可以去验证是否可以邮件通知了。


通过测试工程构建后,Jenkins配置的邮件通接收人可以正常收到构建信息的邮件通知。


jenkins maven 更新依赖 jenkins maven配置_jenkins maven 更新依赖_54





到这里Jenkins配置邮件通知全部完成了。


======================================


邮件通知配置相关的全局属性详解


E-mail Notification 通知选项。反之,您可以通过指定不同于 (  默认选项 ) 的设置来进行覆盖。


Text 和 HTML 两种 .


List-ID 的邮件信头


4. Add 'Precedence: bulk' Email Header:设置优先级


, 该插件会使用这个列表。您可以在项目配置使用 $ DEFAULT_RECIPIENTS 参数包括此默认列表,以及添加新的地址在项目级别。添加抄送: cc: 电子邮件地址例如 ,CC:someone@somewhere.com


, A comma separated list of e-mail addresses to use in the Reply-To header of the email. This value will be available as $DEFAULT_REPLYTO in the project configuration.


7. Emergency reroute:如果这个字段不为空,所有的电子邮件将被单独发送到该地址(或地址列表)。


, 邮件列表应该没有扩展的账户名 ( 如 :@domain.com), 并且使用逗号分隔


9. Default Subject:自定义邮件通知的默认主题名称。该选项能在邮件的主题字段中替换一些参数,这样你就可以在构建中包含指定的输出信息。


10. Maximum Attachment Size:邮件最大附件大小。


11. Default Content:自定义邮件通知的默认内容主体。该选项能在邮件的内容中替换一些参数,这样你就可以在构建中包含指定的输出信息。


脚本,这是我在某篇文章上看到的,不一定准确)。


13. Enable Debug Mode:启用插件的调试模式。这将增加额外的日志输出,构建日志以及Jenkins的日志。在调试时是有用的,但不能用于生产。


14. Enable Security:启用时,会禁用发送脚本的能力,直接进入Jenkins实例。如果用户试图访问Jenkins管理对象实例,将抛出一个安全异常。


15. Content Token Reference:邮件中可以使用的变量,所有的变量都是可选的。


全局邮件变量


插件允许使用变量来动态插入数据到邮件的主题和内容主体中。变量是一个以 $( 美元符号 ) 开始,并以空格结束的字符串。当一个邮件触发时,主题和内容主体字段的所有变量都会通过真实的值动态地替换。同样,变量中的 “ 值 ” 能包含其它的变量,都将被替换成真实的内容。


DEFAULT_SUBJECT 和 DEFAULT_CONTENT ,因此它会自动地使用全局的配置。同理,触发器中的Subject和Content分别对应的是项目配置页面的 DEFAULT_SUBJECT 和 DEFAULT_CONTENT ,所以它也会自动地使用项目的配置。由于变量中的 “ 值 ” 能包含其它的变量,所以就能为变量快速地创建不同的切入点:全局级别 ( 所有项目 ) ,专属级别 ( 单一项目 ) ,触发器级别 (构建结果) 。


Content Token Reference 的问号获取详细的信息。


name=“value” ,而布尔型和数字型使用 name=value 。如果 { 和 } 标记里面没有变量,则不会被解析。示例: $TOKEN,${TOKEN},${TOKEN,count=100},${ENV,var=”PATH”}


提示:用英文逗号分隔变量的参数。


常用的属性如下:


${FILE,path="PATH"} 包括指定文件(路径)的含量相对于工作空间根目录。


path 文件路径,注意 :是工作区目录的相对路径。


${BUILD_NUMBER}  显示当前构建的编号。


${JOB_DESCRIPTION} 显示项目描述。


${SVN_REVISION} 显示svn 版本 号。还支持 Subversion 插件出口 的SVN_REVISION_n 版本。


${CAUSE} 显示谁、通过什么渠道触发这次构建。


${CHANGES } - 显示上一次构建之后的变化。


showPaths  如果为  true, 显示提交修改后的地址。默认 false 。


showDependencies 如果为 true , 显示项目构建依赖。默认为 false


format 遍历提交信息,一个包含 %X 的字符串,其中 %a 表示作者, %d 表示日期, %m 表示消息, %p 表示路径, %r 表示版本。注意,并不是所有的版本系统都支持 %d 和 %r 。如果指定 showPaths 将被忽略。默认 “[%a] %m\\n” 。


pathFormat 一个包含 “%p” 的字符串,用来标示怎么打印 路径。


${BUILD_ID} 显示当前构建生成的 ID 。


${PROJECT_NAME} 显示项目的全名。


${PROJECT_DISPLAY_NAME} 显示项目的显示名称。


${SCRIPT} 从一个脚本生成自定义消息内容。自定义脚本应该放在 "$JENKINS_HOME/email-templates" 。当使用自定义脚本 时会默认搜索$JENKINS_HOME/email-templatesdirectory目录。其他的目录将不会被搜索。


script 当其使用的时候,仅仅只有最后一个值会被脚本使用(不能同时使用script和template )。


template 常规的 simpletemplateengine 格式模板。


${JENKINS_URL} 显示 Jenkins 服务器的 url 地址(你可以再系统配置页更改)。  


${BUILD_LOG_MULTILINE_REGEX} 按正则表达式匹配 并显示构建日志。


regex java.util.regex.Pattern  生成正则表达式匹配的构建日志。无默认值,可为空。


maxMatches 匹配的最大数量。如果为 0 , 将匹配所有。默认为 0 。


showTruncatedLines 如果为 true ,包含 [...truncated ### lines...] 行。默认为 true 。


substText 如果非空,就把这部分文字(而不是整行)插入该邮件。默认为空。


escapeHtml 如果为 true , 格式化HTML 。默认为 false 。


matchedSegmentHtmlStyle 如果非空,输出 HTML 。匹配的行数将变为 <b style=”your-style-value”> html escaped matched line </b> 格式。默认为空。


${BUILD_LOG}  显示最终构建日志。


maxLines 日志最多显示的行数,默认 250 行。


escapeHtml 如果为 true ,格式化 HTML 。默认 false 。


${PROJECT_URL} 显示项目的 URL 地址。


${BUILD_STATUS} - 显示当前构建的状态 ( 失败、成功等等 )


${BUILD_URL} - 显示当前构建的 URL 地址。


${CHANGES_SINCE_LAST_SUCCESS} - 显示上一次成功构建之后的变化。


reverse 在顶部标示新近的构建。默认 false 。


format 遍历构建信息,一个包含 %X 的字符串,其中 %c 为所有的改变, %n 为构建编号。默认 ”Changes for Build #%n\n%c\n” 。


showPaths,changesFormat,pathFormat 分别定义如 ${CHANGES} 的 showPaths 、 format 和 pathFormat 参数。


${CHANGES_SINCE_LAST_UNSTABLE} - 显示显示上一次不稳固或者成功的构建之后的变化。


reverse 在顶部标示新近的构建。默认 false


  format 遍历构建信息,一个包含 %X 的字符串,其中 %c 为所有的改变, %n 为构建编号。默认 ”Changes for Build #%n\n%c\n” 。


showPaths,changesFormat,pathFormat 分别定义如 ${CHANGES} 的 showPaths 、 format 和 pathFormat 参数。


${ENV} – 显示一个环境变量。


var–  显示该环境变量的名称。如果为空,显示所有,默认为空。


${FAILED_TESTS} - 如果有失败的测试,显示这些失败的单元测试信息。


${JENKINS_URL} - 显示 Jenkins 服务器的地址。 ( 你能在 “ 系统配置 ” 页改变它 ) 。


${HUDSON_URL} - 不推荐,请使用 $JENKINS_URL


${PROJECT_URL} - 显示项目的 URL 。


${SVN_REVISION} - 显示 SVN 的版本号。


${JELLY_SCRIPT} - 从一个 Jelly 脚本模板中自定义消息内容。有两种模板可供配置: HTML 和 TEXT 。你可以在 $JENKINS_HOME/email-templates 下自定义替换它。当使用自动义模板时, ”template” 参数的名称不包含 “.jelly” 。


template 模板名称,默认 ”html” 。


${TEST_COUNTS} - 显示测试的数量。


var–  默认 “total” 。


total - 所有测试的数量。


fail - 失败测试的数量。


skip - 跳过测试的数量。



Jenkins钉钉配置


钉钉PC端配置

  • 钉钉PC端(v3.4.2 2017/02/27更新版本)创建自定义机器人
  • 进入某个群->点击下图机器人图标 
  • 选择自定义机器人 
  • 设置内容省略,完成前点击复制Hook地址->完成 

Jenkins端配置

  • 安装插件过程

  • 安装完成后,创建/修改作业中,“构建后的操作”一项点击“增加构建后操作步骤”,选择“钉钉通知器配置” 
  • 输入完整的Jenkins URL与钉钉机器人那儿获取的Hook中的token
  • 此处有个坑,即URL填写,作者给的教程中未填写 "http://" 导致钉钉收到消息后点击无法打开正确页面,正确设置如下:
  • 注:我输入192.168.2.47即可打开我的Jenkins,你们在输入的时候根据自己情况修改(如添加8080端口) 
  • 点击构建,钉钉即可收到消息,点击即可跳转至Jenkins页面 



参考资料: 

     使用Jenkins配置Git+Maven的自动化构建   Jenkins2.32.1+svn+maven安装配置与构建部署(一)Jenkins入门系列*****