文档章节

Jenkins 可扩展持续集成引擎全流程(自动构建-自动部署)

华山猛男
 华山猛男
发布于 05/29 00:55
字数 3535
阅读 40
收藏 3

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

  • 官方网址:https://jenkins.io/zh/
  • 下载地址:https://jenkins.io/download/
  • 下载类型:.war

一、安装

1.Windows 服务安装(下载上图中的Windows版本)

    直接安装即可。

2.Tomcat 部署安装(Tomcat + .war)

    此处省略,只需安装Java JDK和Tomcat后,将下载地war包放入webapps下启动tomcat即可访问。

3.cmd java命令安装(cmd + .war)

    这种方式相对来说比较通用,建议大家使用这种方式来安装,打开cmd,进入到.war包所在目录,执行以下命令。(很多人第一次启动可能会报错ssl等,这个后面需要修改协议,可以忽略,只要启动显示running就算是成功的了)

java -jar jenkins.war --httpPort=12020

    启动完成后,使用浏览器打开地址。

http://127.0.0.1:12020

    输入默认密码进入,已经提示从以下地址进入并查看出密码。

C:\Users\WENC\.jenkins\secrets\initialAdminPassword

    进入到该界面,显示已经离线,我们先解决这个问题。

    打开 http://127.0.0.1:12020/pluginManager/advanced,修改Update Site。

https://updates.jenkins.io/update-center.json
修改为
http://updates.jenkins.io/update-center.json

    重启Jenkins,之前报错的ssl问题会消失。

    进入Jenkins页面。

    安装推荐的插件,后续有其他需要再另行安装其他插件即可,然后进入创建管理员用户更界面。

    保存并完成后,可能会出现空白页面,重启一下Jenkins就好了。

二、更改Jenkins主目录位置(cmd + .war方式)

    Jenkins采用 cmd + .war方式安装,默认生成的主目录位置为:C:\Users\WENC\.jenkins(系统管理-主目录,可见),现将主目录位置移动到D:\Jenkins。

  • 到环境变量配置中,新增系统变量:JENKINS_HOME,值:D:\Jenkins。
  • 然后重启Jenkins,即可观察到位置是否被改变。(将cmd关闭后,再重新打开cmd,启动Jenkins)

    更改目录后,第一次启动会报错,因为没有之前已经安装过的插件信息等,然后我们再从原安装目录将文件全部拷贝覆盖到现在的目录即可。

C:\Users\WENC\.jenkins
拷贝并覆盖到
D:\Jenkins

    再次重新启动即可。

三、Jenkins配置

    系统设置-全局工具配置,配置JDK、Maven、Git等。

3.1 Maven Integration 插件

    介绍:攒略。

    安装Maven Integration 插件,避免新建任务时,无Maven项目选项。

3.2 Jenkins关闭、重启、重新加载

关闭
http://127.0.0.1:12020/exit
重启
http://127.0.0.1:12020/restart
重新加载配置信息
http://127.0.0.1:12020/reload

四、构建项目

    构建Maven 项目为例。

4.1 通用设置

4.2 源码管理

    SVN为例:项目svn地址设置,账号设置。

4.3 构建触发器

”构建触发器”是一个持续集成的触发器插件,可以根据已经完成构建的结果,触发新Job或者传递参数。默认的选项是Build whenever a SNAPSHOT dependency is built,意思是依赖于快照的构建,意思是依赖于快照的构建,当代码有更新时就构建项目。

Build periodically和Poll SCM可以设置定时自动构建。两者区别如下:

  • Poll SCM:定时,检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。
  • Build periodically:定时,进行项目构建(不关心源码是否发生变化)。

    栗子:日程表表达方式,键入以下命令,以每分钟为例。

#每分钟
* * * * *
#每小时
H * * * *
#每12小时
H */12 * * *

#更多规则解释

MINUTE    Minutes within the hour (0–59)

HOUR    The hour of the day (0–23)

DOM    The day of the month (1–31)

MONTH    The month (1–12)

DOW    The day of the week (0–7) where 0 and 7 are Sunday.

指定顺序为MINUTE HOUR DOM MONTH DOW

在某个域指定多个值的规则是:

* specifies all valid values
M-N specifies a range of values
M-N/X or */X steps by intervals of X through the specified range or whole valid range
A,B,...,Z enumerates multiple values

如果要定期执行任务,必须提供H (for "hash")标识。

比如0 0 * * *会在同一时间执行所有任务,而使用H H * * *也会在每天执行一次任务,但是并不是同一时间,这样就可以节省很多资源。

H还可以用于范围:H H(0-7) * * * 标识在每天12:00-7:59之间的某个时间执行任务。

 H * * * * 代表每个小时执行一次。

H/15 * * * *每15分钟执行一次。

4.4 Pre Steps 构建步骤之前

    调用顶层 Maven 目标,这里我们可以选择在构建项目之前使用maven命令对项目进行操作,如:clean 、complier、package 、install。

4.5 Build 构建

  • Root POM(项目pom.xml所在位置):项目名称/pom.xml 或 pom.xml
  • Goals and options:略

4.6 Post Steps(未测试)

    在maven项目创建完成后,我们还需要实现每次构建完成,将war发布到目标主机上,以实现自动发布。我们通过添加shell实现自动发布。

    找到Post steps下有个Execute shell:

    【注意】:Jenkins在执行该shell脚本的时候是以jenkins这个用户身份去执行。某些场景下请注意环境变量PATH。

五、测试构建

    到达这一步,我们可以先尝试构建项目,回到Jenkins主界面,点击对应项目构建,构建完成后,可以看到项目构建记录。

    点击链接,可以看到每一次构建的情况,蓝色表示成功,红色表示失败。

    点击控制台输出,可以查看到构建信息,如果报错自行寻找原因。

六、自动部署到Tomcat服务器(Deploy To Container Plugin插件)

  1. 自动部署.war包到Tomcat服务器下,这里Tomcat服务器在本地Windows系统上为例,Linux系统不同,后续添加。
  2. 首先,配置Tomcat服务器,打开Tomcat目录,conf -> tomcat-users.xml 文件,在tomcat-users标签中间空白处添加以下代码。
  3. username 和 password 设置为 admin,Jenkins里面需要配置账号信息才有权限登陆Tomcat操作。
<role rolename="manager-gui"/>

<role rolename="manager-script"/>

<role rolename="manager-jmx"/>

<role rolename="manager-status"/>

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

    接着回到Jenkins,到插件中心安装Deploy To Container Plugin插件。

    在“构建后操作”下,添加“Deploy war/ear to a container”。

  • WAR/EAR files:配置为上一个操作步骤,生成.war打包文件的位置,我这里是生成在根目录 -> target 目录下。
  • Context path:配置访问路径名,如果不带项目名,则填入"\"即可。
  • Containers:容器类型,选择对应的服务器类型,有GlassFish、JBoss、Tomcat,3种容器。
  • Containers - Credentials:容器的登陆账号,上一步我们已经将管理员账号密码写入到conf -> tomcat-users.xml文件种,即admin。
  • Containers - Tomcat URL:容器访问路径,即通过该链接和提供的账号密码,Jenkins可以找到容器位置并进行部署,因此在界面上没有看到需要填写容器物理路径的地方,这里我设置的tomcat端口即18080。

七、测试部署

  1. 先将Tomcat服务器打开。
  2. 点击开始构建项目,则完成了Maven项目从构建 -> 自动发布的全流程。
  3. 我们尝试在编辑器中完成代码更新,提交到svn服务器上,Jenkins根据我设置的每分钟检查一次源代码是否变更过,如变更则进行构建,然后自动更新部署到Tomcat服务器上。

八、邮件通知

    Jenkins中带有邮件通知服务,即项目在持续化构建过程中,我们可以将构建等信息或问题通过Email的方式发送到指定的邮箱中,达到一个通知的效果,以下列出2种邮件服务,第一种是Jenkins中已经自带的简单邮件服务,第二种是Email Extension Plugin插件复杂邮件服务。

    首先,我们先对系统的全局变量做一个设置,系统管理-系统设置-Jenkins Location,填入系统管理员邮件地址,收件人。

  • Jenkins URL:Jenkins访问地址。
  • 系统管理员邮件地址:邮件接收者的邮箱。

8.1 开启邮箱 SMTP 服务

    一般我们都会使用第三方的邮箱来完成,比如:网易、QQ邮箱等,因此我们需要在第三方邮箱的设置中先开启自己的SMTP服务,这里我们使用QQ邮箱来做栗子。

  •     进入QQ邮箱,设置 -> 账号 -> 账号安全,可以看到服务,开启POP3/SMTP和IMAP/SMTP服务。
  •     点击“生成授权码”,其它邮箱没有进行测试,但是QQ这里必须点击”生成授权码“,因为这个就相当于是”邮箱密码“用于邮件服务当中。
  •     注意:如果在测试过程中(8.2中),Test configuration报错 535,一般情况是这个错误导致的,因为设置的发件人的密码并不是你QQ密码,而是授权码。

8.2 自带简单邮件服务

    Jenkins中自带的简单邮件服务,系统管理-系统设置-邮件通知,这里设置的是”发件人“账号信息。

  •     SMTP服务器:登陆第三方邮箱中进行查询,或者度娘。QQ邮箱:smtp.qq.com
  •     用户默认邮件后缀:@qq.com
  •     使用SMTP认证:勾选
  •     用户名:QQ邮箱
  •     密码:授权码(QQ邮箱是使用授权码,其它邮箱自行查找)
  •     使用SSL协议、SMTP端口:勾选状态,默认465端口;不勾选,默认25端口;如有其他要求,请自行设置
  •     通过发送测试邮件测试配置:勾选
  •     Test e-mail recipient:测试接收人,测试时,发件人和收件人可以设置为一致,等于自己给自己发邮件。

    点击Test configuration,进行测试,Email was successfully sent 表示已经成功发送邮件,自行到邮箱查看,如果出现535,则可能是上一步发件人不是使用授权码导致。(QQ邮箱)

8.3 在项目中使用简单邮件服务

    项目 -> 配置 -> Post Steps -> 添加”执行shell“,这里输入一个错误的命令直接强制使构建失败。

    命令:ech "fail"

    构建设置:

  •     勾选”E-mail Notification“,填写”Recipients“:邮件接收人。
  •     默认勾选”Send e-mail for every unstable build“,每当构建失败时发送邮件。
  •     默认勾选”Send e-mail for each failed module“,每一个失败模块发送邮件。
  •     注意:该简单邮件服务只提供了构建失败时的状况,没有提供其他阶段的通知,比如:构建成功时,构建某个阶段时等等,同时也不能发送html格式的反馈信息。

    设置完毕,点击开始构建项目,在控制台可以看到构建失败的信息。

    邮箱里的构建失败邮件信息。

8.4 复杂邮件服务 Email Extension Plugin插件

    首先到插件中安装该插件(Email Extension Plugin),该插件可以先配置全局统一配置信息,项目中默认使用全局配置信息,然后也可以针对每一个项目做不同的配置调整。

    全局配置信息,系统管理-系统配置-Extended E-mail Notification,这里设置的是”发件人“账号信息。前6项配置和简单邮件配置一致即可。

  •     SMTP server:登陆第三方邮箱中进行查询,或者度娘。QQ邮箱:smtp.qq.com
  •     Default user E-mail suffix:@qq.com或无
  •     Use SMTP Authentication:勾选
  •     User Name:QQ邮箱
  •     Password:授权码(QQ邮箱是使用授权码,其它邮箱自行查找)
  •     Use SSL、SMTP port:勾选状态,默认465端口;不勾选,默认25端口;如有其他要求,请自行设置
  •     Default Content Type:HTML(text/html),使用html格式,默认的简单邮件服务是不允许使用的
  •     Default Recipients:默认邮件接收人
  •     Default Subject:默认主题
  •     Default Content:默认内容

    举个网上的栗子,Default Subject内容如下:  

构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!

    Default Content内容如下:

构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
<hr/>
项目名称:$PROJECT_NAME<br/><hr/>
构建编号:$BUILD_NUMBER<br/><hr/>
svn版本号:${SVN_REVISION}<br/><hr/>
构建状态:$BUILD_STATUS<br/><hr/>
触发原因:${CAUSE}<br/><hr/>
构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>
构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>
变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>
Check console output at $BUILD_URL to view the results.

8.5 在项目中使用复杂邮件服务

    来到项目配置 -> 最后一步”添加构建后操作步骤“ -> Editable Email Notification,在这里已经配置好全局的统一配置信息,重要选项内已经使用”$DEFAULT_“打头的内部表达式来定义,其余的选配需要自行设置,针对不同的构建项目,这里的配置信息可以做不同的调整,不同的项目负责人接收各自项目的信息,否则将使用全局统一配置项。

  •     Disable Extended Email Publisher:勾选后,邮件就不发送。
  •     Project Recipient List:收件人地址;多个收件人邮件地址用逗号进行分割;想使用全局默认配置的话,可以使用$DEFAULT_RECIPIENTS
  •     Project Reply-To List:允许回复人的地址;想使用系统设置中的默认值的话,可以使用$DEFAULT_REPLYTO
  •     Attach Build Log:发送的邮件是否包含日志
  •     Triggers:修改Triggers设置,移除Developers。这里设置了两种状态下发送邮件,Failure - Any 和 Success,全部使用Recipient List,如果上面使用默认配置,则会去寻找全局统一配置信息。

    重新构建,进行测试,我们在控制台可以看到邮件发送成功的信息。

    邮箱里会收到构建报告。

九、待定插件更新

 

© 著作权归作者所有

华山猛男

华山猛男

粉丝 10
博文 187
码字总数 92865
作品 0
海口
程序员
私信 提问
搭建 Jenkins-2.83 服务,部署 spring boot 项目

Jenkins 是什么? Jenkins 是一个可扩展的持续集成引擎。 主要用于: 持续、自动地构建/测试软件项目。 监控一些定时执行的任务。 Jenkins 拥有的特性包括: 易于安装-只要把部署到,不需要数...

PengLei
2017/10/11
0
0
Linux -- 使用Jenkins进行自动化部署

Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。前身是Hudson是一个可扩展的持...

只道寻常
2018/02/02
0
0
《jenkins2.x持续集成部署教程》(1)下载安装jenkins

Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎。 主要用于: 1.持续、自动地构建/测试软件项目,如CruiseControl与DamageControl。 2.监控一些定时执行的任务。 jenkins用来简化项目的...

ehtyfh5t
2016/07/23
909
3
Jenkins入门系列之——01第一章 Jenkins是什么?

第一章 Jenkins是什么? Jenkins 是一个可扩展的持续集成引擎。 主要用于: l 持续、自动地构建/测试软件项目。 l 监控一些定时执行的任务。 Jenkins拥有的特性包括: l 易于安装-只要把jen...

雨飞飞
2016/02/26
59
0
Jenkins 2.32.2 和 2.44 发布,可扩展的持续集成引擎

Jenkins 2.32.2 和 2.44 发布了。详细更新日志请看这里 Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎。 主要用于: 1.持续、自动地构建/测试软件项目,如CruiseControl与DamageContr...

淡漠悠然
2017/02/04
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

IT兄弟连 Java语法教程 流程控制语句 控制循环结构2

使用continue忽略本次循环剩下的语句 continue的功能和break有点类似,区别是continue只是忽略本次循环剩下的语句,接着开始下一次循环,并不会终止循环;而break则是完全终止循环本身。如下...

老码农的一亩三分地
40分钟前
1
0
[java]str.replaceAll(" ", "")替换空格不行

str.replaceAll(" ", ""); //去掉所有空格,包括首尾、中间 不行? 全角半角空格 https://blog.csdn.net/qq_33210042/article/details/78087713 https://www.cnblogs.com/shuilangyizu/p/66......

Danni3
40分钟前
3
0
Python登录豆瓣并爬取影评

上一篇我们讲过Cookie相关的知识,了解到Cookie是为了交互式web而诞生的,它主要用于以下三个方面: 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息) 个性化设置(如...

猪哥66
56分钟前
1
0
常见排序的指针实现【C++ Code】

本来是想加上传cmp函数的,后来也懒得写了 然后基数排序虽然写的是模板类,但也只是支持整数了… #include <cstdio> #include <cstring> #include <algorithm> #include <typeinfo> using name......

shzwork
今天
3
0
OSChina 周一乱弹 —— 带这么多钱,你要泡我吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :白给?#今日歌曲推荐# 分享Lana Del Rey的单曲《Yayo》: 《Yayo》- Lana Del Rey 手机党少年们想听歌,请使劲儿戳(这里) @红薯...

小小编辑
今天
2.2K
19

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部