Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作。能够实现项目的自动构建、打包、测试、发布、构建结果通知、代码质量分析等等。jenkins官网地址为:https://wiki.jenkins-ci.org/display/JENKINS/Home
Jenkins安装文件下载
目前最新的版本是2.46.1版本
地址http://mirrors.jenkins-ci.org/下载适合的Jenkins版本。
Windows最新稳定版的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的安装后的.jenkins\secrets\initialAdminPassword文件夹,输入后点击Continue按钮,页面会调转到
此时创建一个管理员账号和密码以及电子邮箱地址,然后点击Save and Finish进入,显示下图则表明jenkins启动成功
主要系统配置:
系统管理-Global Tool Configuration
配置JDK
配置MAVEN
系统管理-系统设置
主目录设置,可以默认,在windows下面是 C:\Users\用户名\.jenkins,可手动设置到其他目录,比如F:\.jenkins等
jenkins Location设置:建议修改为IP加端口
在这儿还可以配置MAVEN和EMAIL、GitHub、SonarQube等,待具体使用时再详细介绍。
新建一个项目JOB任务
本文以一个Maven结构的java web工程为列:
点击新建
输入项目名
输入Job名,然后选择构建一个风格自由的软件项目,以及其他一些参数信息注意:如果有多个项目,建议工作空间+项目名称,例:C:\Users\admin\.jenkins\workspace\demo,demo为项目名称,也可取其它名称,这样会在工作空间下新建不同目录,以便区分不同项目
原码管理
在此我使用svn;填写Repository URL及Credentials,及svn的地址及用户信息,其中Credentials在首页Credentials选项新建;
注意:如果是Maven项目,且有多个模块,则Repository URL路径指向所有项目的根地址
在首页Credentials选项新建,输入svn的账号和密码
构建触发器:
Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。我的配置如下:
*/5 * * * * (每5分钟检查一次源码变化)
Build periodically:周期进行项目构建(它不care源码是否发生变化),我的配置如下:
0 2 * * * (每天2:00 必须build一次源码)
注:Schedule的配置规则是有5个空格隔开的字符组成,从左到右分别代表:分 时 天 月 年。*代表所有,0 12,20 * * * 表示“在任何年任何月任何天的12和20点0分”进行构建。
项目构建:
maven version : 选之前录入的maven;
Goals选项输入打包编译时要执行的命令,如:clean package/clean install;
POM选项选择pom文件所在的相对位置,如果有多个Maven模块,选择父级的pom.xml;
保存,首页左侧 点击 立即构建 选项即可构建项目了。
监控:
当任务一旦运行,您将会看到这个任务正在队列中的仪表板和当前工作主页上运行。这两种显示如下。
图29 主页监控(左),项目监控(右)
一旦构建完成后,完成后的任务将会有三个地方进行显示。
你可以在Jenkins的控制面板上看到它,如下图。
图30 主页项目界面
在上面展示的截图中,您将注意到有两个图标描述当前作业的状态。S栏目代表着“最新构建状态”,W栏目代表着“构建稳定性”。Jenkins使用这两个概念来介绍一个作业的总体状况:
构建状态:下图中分级符号概述了一个Job新近一次构建会产生的四种可能的状态:
Successful:完成构建,且被认为是稳定的。
Unstable:完成构建,但被认为不稳定。
Failed:构建失败。
Disabled:构建已禁用。
图31 构建状态界面
构建稳定性: 当一个Job中构建已完成并生成了一个未发布的目标构件,如果您准备评估此次构建的稳定性,Jenkins会基于一些后处理器任务为构建发布一个稳健指数 (从0-100 ),这些任务一般以插件的方式实现。它们可能包括单元测试(JUnit)、覆盖率(Cobertura )和静态代码分析(FindBugs)。分数越高,表明构建越稳定。下图中分级符号概述了稳定性的评分范围。任何构建作业的状态(总分100)低于80分就是不稳定的。
图32 构建稳定性界面
你也可以在当前Job主界面上看到它,如下图左下部分
图33 项目主界面
当前作业主页上还包含了一些有趣的条目。左侧栏的链接主要控制Job的配置、删除作业、构建作业。右边部分的链接指向最新的项目报告和构件。
通过点击构建历史(Build History)中某个具体的构建链接,您就能跳转到Jenkins为这个构建实例而创建的构建主页上。如下图
图34 构建历史界面
如果你想通过视图输出界面来监控当前任务的进展情况。你可以单击Console Output(控制台输出)。如果工作已完成,这将显示构建脚本产生的静态输出;如果作业仍然在运行中,Jenkins将不断刷新网页的内容,以便您可以看到它运行时的输出。如下图:
图35 控制台输出界面
查看构建日志:
日志信息:
构建成功!!!如报一下错误:
解决方案:
(a)修改pom.xml文件
<build>
<finalName>demo</finalName>
</build>
添加<defaultGoal>install</defaultGoal>
即:
<build>
<defaultGoal>install</defaultGoal>
<finalName>demo</finalName>
</build>
(b)指定默认Goals
clean install -Dmaven.test.skip=true #加入了跳过测试的代码
重新构建。
部署项目:
构建后操作:
配置后保存,重新构建,其中demo是我web项目的名称,此处的http://localhost:8081,是部署demo项目的服务器和端口
WAR/EAR files:target\demo.war,是构建后生成的war包,正常情况下打包成功后就会部署到tomcat下webapps目录下,如
果构建成功,但没有自动部署,修改WAR/EAR files:**/*.war试试。
构建成功后,即可登录项目验证:
到此Jenkins部署就完成了!!!!!!!!!!!!!!
Jenkins自动部署配置
jenkins自动Deploy插件安装
要实现jenkins的自动部署,首先是要下载 Deploy to Container Plugin 插件(这个是支持将代码部署到tomcat容器的)
找到:插件管理 在“可选插件”界面
安装完之后,如果勾选了:安装完成后重启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
)
图28 远程部署配置界面
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内置默认的邮件通知配置
1、全局配置
点击左边的“系统管理”菜单,选择右边的“系统设置”
在系统设置中找到Jenkins Locaction项填入Jenkins URL和系统管理员邮件地址,系统管理员邮件地址一定要配置,否则发不了邮件通知。因为邮件通知都是由系统管理员的邮箱发出来的。
找到邮件通知项,填入SMTP服务器信息及用户名、密码等认证信息。(
此处使用SMTP用户名和密码需要特别注意的是如果是QQ和163等邮箱配置试密码
不是邮件用户名的密码
,
而是邮箱客户端授权码!!!网易邮箱客户端授权码设置链接
)
配好以后勾选“通过发送测试邮件测试配置”
填入接收测试邮件的地址,点击“Test configuration”。如果配置正确就会在下面显示
Email was successfully sent
在测试接收邮箱就会收到由
Jenkins系统管理员的邮箱发出来的
一封测试邮件。说明邮箱通知确实已经配置正确并能够正常收发
Jenkins的
通知邮件了。有网友说如果配的发送邮箱是某个邮件服务商的比如163的邮件,接收邮箱也得要配相同邮件服务商163的才可以收到邮件,经过测试没有这种限制,只要是能够收发邮件随便配哪个邮件服务商126、163、QQ、189甚至公司邮件等的都可以收。
2、项目配置
邮件通知的全局设置配好以后就可以在具体的项目中应用发送邮件通知了。
在项目的设置中找到“增加构建后的操作步骤”,选择“E-mail Notifacation”通过E-mail通知。
在Recipients中填入邮件通知接收者中,如果有多个接收者用空格分隔,可以发送邮件通知给多个相关的接收人。
如果配置没有问题,在构建出问题的时候都会有邮件通知到邮件通知接收者。
二、Email Extension Plugin插件配置邮件通知
1、全局配置
同样在点击左边的“系统管理”菜单,选择右边的“系统设置”,找到Extend E-mail Notification进行全局配置。
同样填好SMTP Server的信息。点击“高级”进行SMTP鉴权的配置,配置发邮件人的用户名、密码等信息。
默认收件人填需要发送邮件通知的人,如有多个用空格分隔
点击最右下角的"Default Triggers ..."按钮设置默认的触发邮件通知的事件。
根据实际情况勾选需要触发邮件通知的事件。
保存全局的配置信息后到项目中进行项目的配置。
2、项目配置
进入到具体的项目配置界面点击“配置”,在配置界面点击“增加构建后操作步骤”,选择“Editable Email Notification”
在设置中保存默认就可以了。
可以在“Advanced Settings”中针对该项目进行个性化的配置。
可以针对该项目定义该项目通知的收件人列表、主题、内容、附件等。
设置完后点击保存。就可以去验证是否可以邮件通知了。
通过测试工程构建后,Jenkins配置的邮件通接收人可以正常收到构建信息的邮件通知。
到这里Jenkins配置邮件通知全部完成了。
======================================
邮件通知配置相关的全局属性详解
1. Override Global Settings:如果不选,该插件将使用默认的
E-mail Notification
通知选项。反之,您可以通过指定不同于
(
默认选项
)
的设置来进行覆盖。
2. Default Content Type:指定构建后发送邮件内容的类型,有
Text
和
HTML
两种
.
3. Use List-ID Email Header:为所有的邮件设置一个
List-ID
的邮件信头
4. Add 'Precedence: bulk' Email Header:设置优先级
5. Default Recipients:自定义默认电子邮件收件人列表。如果没有被项目配置覆盖
,
该插件会使用这个列表。您可以在项目配置使用
$ DEFAULT_RECIPIENTS
参数包括此默认列表,以及添加新的地址在项目级别。添加抄送:
cc:
电子邮件地址例如
,CC:someone@somewhere.com
6. Reply To List:回复列表
, 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:如果这个字段不为空,所有的电子邮件将被单独发送到该地址(或地址列表)。
8. Excluded Committers:防止邮件被邮件系统认为是垃圾邮件
,
邮件列表应该没有扩展的账户名
(
如
:@domain.com),
并且使用逗号分隔
9. Default Subject:自定义邮件通知的默认主题名称。该选项能在邮件的主题字段中替换一些参数,这样你就可以在构建中包含指定的输出信息。
10. Maximum Attachment Size:邮件最大附件大小。
11. Default Content:自定义邮件通知的默认内容主体。该选项能在邮件的内容中替换一些参数,这样你就可以在构建中包含指定的输出信息。
12. Default Pre-send Script:默认发送前执行的脚本(注:grooy
脚本,这是我在某篇文章上看到的,不一定准确)。
13. Enable Debug Mode:启用插件的调试模式。这将增加额外的日志输出,构建日志以及Jenkins的日志。在调试时是有用的,但不能用于生产。
14. Enable Security:启用时,会禁用发送脚本的能力,直接进入Jenkins实例。如果用户试图访问Jenkins管理对象实例,将抛出一个安全异常。
15. Content Token Reference:邮件中可以使用的变量,所有的变量都是可选的。
全局邮件变量
email-ext
插件允许使用变量来动态插入数据到邮件的主题和内容主体中。变量是一个以
$(
美元符号
)
开始,并以空格结束的字符串。当一个邮件触发时,主题和内容主体字段的所有变量都会通过真实的值动态地替换。同样,变量中的
“
值
”
能包含其它的变量,都将被替换成真实的内容。
比如,项目配置页的默认主题和内容分别对应的是全局配置页面的
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钉钉配置