Jenkins 学习笔记

本贴最后更新于 2141 天前,其中的信息可能已经天翻地覆

Jenkins 是一款开源持续集成工具,用于项目开发,具有自动化构建、测试和部署等功能。本文以 CentOS7 环境为例,总结了 Jenkins 的安装与配置、邮件功能使用,以此演示 Java 项目(SVN+Maven)的构建等常用操作等。

1.Jenkins 安装

1.1 安装 JDK

Jenkins 是基于 java 开发的,所以需要安装 JDK,下载 JDK:https://www.oracle.com/technetwork/java/javase/downloads/index.html
这里以 jdk1.8 为例子,设置 jdk 的环境变量:

vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8
export PATH=${JAVA_HOME}/bin:$PATH

1.2 安装 Maven

构建项目是基于 Maven,所以需要安装 Maven。
下载 maven:http://maven.apache.org/download.cgi
解压压缩包重命名为”maven“,复制到:/usr/local/
配置环境变量:

vi /etc/profile
export MAVEN_HOME=/usr/local/maven
export PATH=${MAVEN_HOME}/bin:$PATH

1.3 安装 Jenkins

下载 Jenkins 放到 usr/local/目录下,地址:https://pkg.jenkins.io/redhat-stable/
安装 Jenkins 公钥:sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins.io.key
cd 到 usr/local/目录,执行命令安装 jenkins:sudo yum -y install jenkins-*.noarch.rpm
Jenkins 的安装路径默认是在:/var/lib/jenkins
修改配置文件:

sudo vi /etc/sysconfig/jenkins
JENKINS_USER="root" ## 原值 "jenkins" 必须修改,否则权限不足
JENKINS_PORT="8080"

启动:

sudo systemctl enable jenkins
sudo systemctl restart jenkins

这时候你可能会发现启动失败,提示:

Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.

那我们使用命令来查看下原因:
systemctl status jenkins.service

查看启动日志,发现错误:
imagepng

说明 jenkins 在/usr/bin/java 找不到对应的 java 命令,编辑文件,把本地的 jdk 路径加上:

vi /etc/rc.d/init.d/jenkins:

candidates="
/usr/local/jdk1.8/bin/java
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/bin/java
"

接下来再次启动 Jenkins:sudo systemctl start jenkins
这时候会报错误:
Warning: jenkins.service changed on disk. Run 'systemctl daemon-reload' to reload units.

解决方法:systemctl daemon-reload

然后再次启动:systemctl restart jenkins

访问 Jenkins 之前,先修改一下 connectionCheckUrl,否则 Jenkins 启动一直显示 Jenkins 正在启动,请稍后...
修改方法:
到 jenkins 的目录(/var/lib/jenkins)下找到 update/default.json,把 "connectionCheckUrl":"http://www.google.com/" 改为 "connectionCheckUrl":"http://www.baidu.com/"。

再次启动:systemctl start jenkins

在浏览器输入:http://localhost:8080

Jenkins 的默认的用户名是 admin,密码在:
cat /var/lib/jenkins/secrets/initialAdminPassword 可以找到。

登录后的界面:
imagepng
这里是让安装插件,现在先不安装,直接点击右上角关掉。这个时候如果界面是空白的,需要重启一下 Jenkins,再访问就正常了。

1.4 修改密码

点击 系统管理--> 管理用户--> 点击 admin 的右边的设置图标进去修改密码。
imagepng



2.Jenkins 卸载

sudo systemctl stop jenkins
sudo systemctl disable jenkins
sudo yum -y remove jenkins
sudo rm -rf /var/{lib,log,cache}/jenkins /usr/lib/jenkins /root/.jenkins
sudo rm -rf `sudo find /{etc,var,run} -name "jenkins*"`

3.工具设置

在系统点击 系统管理--> 全局工具配置:
JDK 下不勾选“自动安装”,指定别名=JDK1.8, JAVA_HOME=/usr/local/jdk1.8
Maven 下不勾选“自动安装”,指定别名=apache-maven-3.5.4, MAVEN_HOME=/usr/local/apache-maven-3.5.4
点击 Save 按钮。
重启 Jenkins 后生效:sudo systemctl restart jenkins
imagepng

4.插件安装

在系统点击 系统管理--> 插件管理--> 可选插件:
imagepng

勾选需要安装的插件后点击”直接安装“,现在安装几个必备插件,

  • Subversion Plug-in ## 版本管理 SVN 的插件
  • Maven Integration plugin ## 项目构建 Maven 的插件
    无需重启 Jenkins 插件即生效。如遇失败可重试或离线安装。
    安装插件过程出错就多安装几次,或者开启 VPN 进行安装。

5.构建项目

5.1.创建新项目

主页:点击“创建一个新项目”;
项目类型:输入任务名称 test,类型选择“构建一个 Maven 项目”(如果没有此项可选,请检查插件“Maven Integration plugin”是否已安装);
imagepng

5.1.源码管理

在创建项目后,自动跳转到配置页面,在配置页面点击”源码管理“,这里指定我们的 svn 的源码仓库。
选择“Subversion”(如果没有此项可选,请检查插件“Subversion Plug-in”是否已安装),
仓库 URL 可以指定 svn/http/https 之一,这里指定 svn://10.211.55.6/test ,这个是我的一个测试项目,大家自行写上自己的项目 svn。
Credentials: 添加 SVN 用户名密码,点击 Add,再点击 Jenkins,在打开的窗口输入 svn 的用户名密码,保存后并从下拉列表中选择它,这里我的是 calon/******。
imagepng

5.2.构建触发器

5.2.1.手动构建

imagepng
如上图,Jenkins 可以通过项目里点击“立即构建”来进行手动构建项目,会在 Build History 里列出构建历史,有进度的说明当前正在构建,点击进去查看详情:
imagepng
如上图,可以点击控制台输入正在构建的进度等。

Jenkins 的触发构建有定时构建、其他工程构建后触发、触发远程构建 (例如,使用脚本)、轮询 SCM 等。

5.2.2.定时构建

imagepng

定时触发的格式是五个参数:* * * * *
第一个参数代表的是分钟 minute,取值 0~59;
第二个参数代表的是小时 hour,取值 0~23;
第三个参数代表的是天 day,取值 1~31;
第四个参数代表的是月 month,取值 1~12;
最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。
所以 0 * * * * 表示的就是每个小时的第 0 分钟执行构建。

每隔 5 分钟构建一次
H/5 * * * *
每两小时构建一次
H H/2 * * *
每天中午 12 时定时构建一次
0 12 * * *
每天下午 18 时定时构建一次
0 18 * * *

5.2.3.轮询 SCM 构建

语法和定时构建一样,轮询 SCM 和定时构建的区别就是:
定时构建:不管 SVN 或 Git 中数据有无变化,均执行定时化的构建任务
轮询 SCM:只有在 SVN 或 Git 中数据有更新,则执行构建任务,一般使用这种就可以了。

5.2.4.其他工程构建后触发

imagepng
这种触发条件是依赖其他项目的构建情况进行构建,输入依赖的项目名称,还有触发的时机。

5.2.5.触发远程构建 (例如,使用脚本)

imagepng

触发远程构建是什么意思呢?通过上图可以看到,意思是通过复制这个 URL 地址,在别的机器上打开这个 URL 就相当于给这个 Jenkins 服务器发送了一个构建请求,第一个参数 JENKINS_URL,这里我们写 IP 地址或者机器 hostname,第二个参数 TOKEN_NAME 就是你在身份验证令牌文本输入框输入的值。这里我们把令牌设置成 123456,然后我就在我机器的另外一个浏览器来模拟远程构建,这个时候我的远程构建地址就是这样的:http://localhost:8080/job/Test1/build?token=123456。到后台就可以看到项目开始在构建了。

5.3.Build 设置

Root POM: 指定 pom.xml 相对路径
Goals and options: 指定 mvn 执行目标或选项,设置为 package -Dmaven.test.skip=true

Post Steps 设置

定制构建后的操作,通常选择“Run only if build succeeds”,支持 shell 等脚本;

6.开启邮件报告

Jenkins 提供邮件发送的插件,原理与邮件客户端一样:把发件人的邮箱帐号、密码、SMTP 服务器告诉 Jenkins,Jenkins 需要时使用该帐号向指定的收件人发送邮件报告。

6.1.插件安装

Jenkins 自带邮件插件(Mailer Plugin)的功能很弱且无法自定制,
需要安装扩展邮件插件: Email Extension Plugin。在插件管理里搜索 Email Extension 进行安装。

6.2.邮件参数设置

在系统管理-> 系统设置:

imagepng
imagepng
imagepng
imagepng
imagepng
imagepng

6.2.1.设置管理员邮箱

进入:系统管理-> 系统设置->Jenkins Location
系统管理员邮件地址 设为 xxx@163.com

6.2.2 设置发件人帐号

进入:系统管理-> 系统设置->Extended E-mail Notification
“SMTP server” 设为 smtp.163.com
“Default user E-mail suffix” 设为 @163.com
“Use SMTP Authentication” 选中
“User Name” = xxx@163.com(必须与管理员邮箱相同)
“Password” = **
“Use SSL” = on
“SMTP port” = 465
“Charset” = UTF-8
“Default Content Type” = HTML (text/html)

6.2.3.设置邮箱模板

Default Subject: 构建通知:BUILD_NUMBER - $BUILD_STATUS
Default Content:

本邮件由系统自动发出,请勿回复!<br/>
<h2><font color="#CC0000">构建结果 - ${BUILD_STATUS}</font></h2> 
<h4><font color="#0B610B">构建信息</font></h4>
<hr size="2" width="100%" />
<ul>    
<li>项目名称:${PROJECT_NAME} - #${BUILD_NUMBER}</li>    
<li>触发原因:${CAUSE}</li>    
<li>项目 URL:<a href="${PROJECT_URL}">${PROJECT_URL}</a></li>    
<li>构建 URL:<a href="${BUILD_URL}">${BUILD_URL}</a></li>    
<li>构建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>    
<li>工作目录:<a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
</ul> 
<h4><font color="#0B610B">失败用例</font></h4>
<hr size="2" width="100%" />$FAILED_TESTS<br/> 
<h4><font color="#0B610B">最近提交(#$SVN_REVISION)</font>
</h4>
<hr size="2" width="100%" />
<ul>${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}</ul>
详细提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/> 
<h4><font color="#0B610B">代码检查</font></h4>
<hr size="2" width="100%" />
FindBugs:<a href="${BUILD_URL}findbugsResult">${BUILD_URL}findbugsResult</a><br/>
CheckStyle:<a href="${BUILD_URL}checkstyleResult">${BUILD_URL}checkstyleResult</a><br/>
PMD:<a href="${BUILD_URL}pmdResult">${BUILD_URL}pmdResult</a><br/>
6.2.4.设置邮件触发时机

点击 Default Triggers,比较好的方案是选中两项:

  • Failure - Any ## 可定义“编译失败时”才向哪些人员发邮件(比如最近代码提交者)
  • Success ## 可定义“构建成功时”才向哪些人员发邮件(比如所有产品关注者)

6.3.项目设置中启用邮件

在首页点击 test 项目进去,点击左边的配置,再选构建后操作步骤: 增加 Editable Email Notification(来自插件 Email Extension Plugin)。下图设置的效果是:
imagepng
添加 Editable Email Notificatoin 后,点击 Advanced Settings....

  • 构建失败时,向上次成功构建之后导致构建失败的 SVN 提交的人员发送邮件;
    imagepng
    imagepng

  • 构建成功时,向上次成功构建之后有 SVN 提交的人员、还有“Project Recipient List”中的人员发送邮件;
    imagepng
    imagepng






扫一扫有惊喜: [![imagepng](http://itechor.top/solo/upload/bb791a58c3a84193b7f643b6849482c5_image.png) ](http://ym0214.com)
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    53 引用 • 37 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...