Jenkins集成综合实践

Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。
安装Jenkins:
官网: https://jenkins.io/
1.1.安装JDK/Maven
Jenkins自身采用java开发,所以必须安装JDK;
本文集成的项目基于Maven架构,所以Maven也必须安装;
java安装:
可通过yum安装,也可以下载安装,我的博客里有专门的文章讲述,在Tomcat单机多实例的文章里也有讲述:
1、https://blog.csdn.net/weixin_40365361/article/details/92849794
2、https://blog.csdn.net/weixin_40365361/article/details/93525834注:这里基于maven的框架需要java1.8的版本,所以需要安装配置jdk1.8,如果服务器安装过jdk1.7,再安装个1.8,然后将环境变量配置成1.8的环境变量;
例如:

其实如果配置过jdk1.7,只需要将jdk 1.7的路径改成1.8的路径就可以了在这里插入图片描述
安装Maven
进入到/usr/local/目录
创建maven文件夹
mkdir maven
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz
解压:
tar -xzvf apache-maven-3.6.0-bin.tar.gz
vi /etc/profile
编辑:
M2_HOME=/usr/local/maven/apache-maven-3.6.0
MAVEN_HOME=/usr/local/maven/apache-maven-3.6.0
PATH= M 2 H O M E / b i n : M2_HOME/bin: M2HOME/bin:PATH
export M2_HOME
export MAVEN_HOME
export PATH
//退出后执行
source /etc/profile
安装完成执行命令 mvn -v ,正常返回JDK和maven版本信息说明安装OK
1.2 安装 Jenkins
以下四种方法任选一种,推荐第一种。
1.2.1 离线安装

http://pkg.jenkins-ci.org/redhat/

wget http://pkg.jenkins-ci.org/redhat/jenkins-2.39-1.1.noarch.rpm ## 下载(也可以Windows下载再转过来)
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins.io.key ## 公钥
sudo yum -y install jenkins-*.noarch.rpm
1.2.2 在线安装

http://pkg.jenkins-ci.org/redhat/

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
sudo yum -y install jenkins
1.2.3 基于 Tomcat 安装
安装并启动 Tomcat;
从官网下载 jenkins.war 至 $CATALINA_BASE/webapps,Tomcat 会自动部署;
浏览器访问:http://IP:8080/jenkins/

1.2.4 免安装方式
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
sudo java -jar jenkens.war ## 启动服务,直至看到日志 Jenkins is fully up and running
curl http://localhost:8080/ ## Jenkins 已就绪
1.3 调整配置文件

sudo vim /etc/sysconfig/jenkins

JENKINS_USER=“root” ## 原值 “jenkins” 必须修改,否则权限不足
JENKINS_PORT=“8080” ## 原值 “8080” 可以不修改

还有开启 HTTPS 相关参数,此处不打算开启,故不作说明

安装目录: /usr/lib/jenkins
工作目录: /var/lib/jenkins(对应于环境变量 JENKINS_HOME)
1.4 启动
sudo systemctl enable jenkins
sudo systemctl restart jenkins
查看日志文件: sudo tail -f /var/log/jenkins/jenkins.log启动后会生成文件 hudson.model.UpdateCenter.xml,需要修改它,
否则浏览器首次进入时会卡在“Jenkins 正在启动,请稍后…”

原值: http://updates.jenkins-ci.org/update-center.json

新值: http://mirror.xmission.com/jenkins/updates/update-center.json

或者: http://mirror.xmission.com/jenkins/updates/current/update-center.json

sudo cat /var/lib/jenkins/hudson.model.UpdateCenter.xml
sudo sed -i ‘s/updates.jenkins-ci.org/mirror.xmission.com/jenkins/updates/g’ /var/lib/jenkins/hudson.model.UpdateCenter.xml
sudo cat /var/lib/jenkins/hudson.model.UpdateCenter.xml
sudo systemctl restart jenkins
防火墙放行

sudo vim /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

重启生效: sudo systemctl restart iptables

1.6 卸载
如果要重装,或者本机不需要 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*"
2 基本配置
2.1 登录浏览器进入 http://centos:8080/
首次进入需要输入初始密码来解锁,初始密码查看方法: sudo cat /var/lib/jenkins/secrets/initialAdminPassword

在这里插入图片描述

在这里插入图片描述
修改登录密码:主界面右上角“注销”链接的左边的用户名下拉菜单中点“设置”。

2.2 安全设置默认情况下,任何用户都可以使用 Jenkins 进行发布。
可以进入相关设置:系统管理 / Configure Global Security,
选择 Jenkins专有用户数据库,不要选中 允许用户注册;
选择 登录用户可以做任何事,选中 Allow anonymous read access
2.3 插件安装方法如果安装插件失败率很高,可设置翻墙,请参考我之前的文章:翻墙代理 Shadowsocks 使用详解:https://kefeng.wang/2016/10/05/shadowsocks/
2.3.1 离线安装
手工下载(*.hpi): http://updates.jenkins-ci.org/download/plugins/
进入:系统管理 / 管理插件 / 高级,然后上传插件进行安装。
无需重启 Jenkins 插件即生效。
2.3.2 在线安装进入:系统管理 / 管理插件 / 可选插件
查找并勾选所需插件,点击“直接安装”;
无需重启 Jenkins 插件即生效。如遇失败可重试或离线安装。
在这里插入图片描述
2.4 工具设置进入:系统管理 / Global Tool Configuration
JDK 下不勾选“自动安装”,指定别名=JDK-1.8.0.111, JAVA_HOME=/usr/java/jdk1.8.0_111
Maven 下不勾选“自动安装”,指定别名=Maven-3.3.9, MAVEN_HOME=/opt/apache-maven-3.3.9
点击 Save 按钮。
重启 Jenkins 后生效:sudo systemctl restart jenkins

在这里插入图片描述
3 Maven(SVN) 项目接入3.1 准备 SVN 源码使用 alibaba 的 fastjson 来演示:
下载: https://github.com/alibaba/fastjson/archive/master.zip
SVN地址: svn://centos/repo1/fastjson3.2 安装相关插件Subversion Plug-in ## 版本管理 SVN 的插件Git plugin ## 版本管理 GIT 的插件Maven Integration plugin ## 项目构建 Maven 的插件Gradle Plugin ## 项目构建 Gradle 的插件
无需重启 Jenkins 插件即生效。如遇失败可重试或离线安装。3.3 新建构建项目3.3.1 开始创建主页:点击“新建”;
项目类型:输入项目名称 fastjson,类型选择“构建一个Maven项目”(如果没有此项可选,请检查插件“Maven Integration plugin”是否已安装);
在这里插入图片描述
3.3.2 源码管理选择“Subversion”(如果没有此项可选,请检查插件“Subversion Plug-in”是否已安装),
仓库URL可以指定 svn/http/https 之一,这里指定 svn://centos/repo1/fastjson
Credentials: 添加 SVN 用户名密码,并从下拉列表中选择它。
在这里插入图片描述
3.3.3 定时触发构建构建触发器: 只选中 Build periodically, “日程表”格式与 crontab 相似但有细微差别,示例如下:

  • 每行由 5 个值组成(空格或TAB分隔),分别表示分(0-59)、时(0-23)、日(1-31)、月(1-12)、周(0-7, 0/7=周日) ## “M,N” 表示M和N;“M-N” 表示范围[M,N];“M-N/X” 表示范围[M,N]内每隔X;"*/X"

    表示整个范围内每隔X ##
    前面提到的M/N/X的值都可以用H(意为Hash)代替,散列值起到随机值的效果,且同一项目取值稳定,这对于项目多时分散压力很有用。
    H/10 H(0-8) * * 1-5 ## 触发时间: 工作日、Hour为0~8按哈希随机、Minute以10为间隔
    H/10 H * * 0,6,7 ## 触发时间: 周末、Hour为全天按哈希随机、Minute以10为间隔 ##
    “日程表”修改后,下方会给出下次执行时间点的预告。
    在这里插入图片描述

3.3.4 版本提交触发构建构建触发器: 只选中 Poll SCM,可指定检查 SVN 代码是否有提交的时间:

格式与 “Build periodically” 相同

H/10 * * * * ## 任何时候,每隔 30 分钟就检测一次 SVN,如果有提交就启动构建

在这里插入图片描述
3.3.5 Build 设置Root POM: 指定 pom.xml 相对路径
Goals and options: 指定 mvn 执行目标或选项,设置为 package -Dmaven.test.skip=true3.3.6 Post Steps 设置定制构建后的操作,通常选择“Run only if build succeeds”,支持 shell 等脚本;

  • 脚本工作目录为: /var/lib/jenkins/workspace/fastjson

    sudo systemctl stop tomcat

    sudo cp -f target/*.war /opt/apache-tomcat-8.5.9/webapps/

    sudo systemctl start tomcat ls -l target/*.?ar

    在这里插入图片描述
    3.4 手工触发构建进入 My Views, 右侧看到各个项目;
    点击进入关注的项目,点击左侧的“立即构建”;
    在这里插入图片描述
    开始构建或构建完毕后,左下方列出每次构建的链接,点击进入某次构建;
    点击左侧的“Console Output”,可查看构建日志,如有报错可以看到;
    在这里插入图片描述
    纠正错误后,返回到工程,再次点击“立即构建”,直至构建成功;
    如有网络相关报错,重试几次也会成功。
    4 开启 Java 代码静态检查4.1 安装相关插件如果是离线安装,需要先依次安装被依赖的插件:Script Security PluginMatrix Project PluginStatic Analysis Utilities再安装直接被使用的插件:FindBugs Plug-inCheckstyle Plug-inPMD Plug-in插件官方资料:
    FindBugs: https://wiki.jenkins-ci.org/display/JENKINS/FindBugs+Plugin
    Checkstyle: http://maven.apache.org/plugins/maven-checkstyle-plugin/usage.html
    PMD: http://maven.apache.org/plugins/maven-pmd-plugin/usage.html
    4.2 Maven 中设置插件(pom.xml)
    <project …>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    org.codehaus.mojo findbugs-maven-plugin 3.0.4 true true true org.apache.maven.plugins maven-checkstyle-plugin 2.17 false true true checkstyle.xml org.apache.maven.plugins maven-pmd-plugin 3.7 false

4.3 修改 Jenkins 构建配置
在这里插入图片描述
4.3.1 设置 Maven“Build”标签页,Goals and options 设置为:
package -Dmaven.test.skip=true findbugs:findbugs checkstyle:checkstyle pmd:pmd4.3.2 开启相关报告“构建设置”标签页,打开以下三个选项:Publish FindBugs analysis resultsPublish Checkstyle analysis resultsPublish PMD analysis results4.4 构建后查看报告构建后进入构建页面,从左边点击查看报告:FindBugs WarningsCheckstyle WarningsPMD Warnings
在这里插入图片描述

5 开启邮件报告Jenkins 的邮件发送,原理与邮件客户端一样:把发件人的邮箱帐号、密码、SMTP服务器告诉 Jenkins,Jenkins 需要时使用该帐号向指定的收件人发送邮件报告。
5.1 安装相关插件Jenkins 自带邮件插件(Mailer Plugin)的功能很弱且无法自定制,
需要安装扩展邮件插件: Email Extension Plugin
5.2 全局统一设置以 admin@company.com 为例,如下图设置:

在这里插入图片描述
5.2.1 设置管理员邮箱进入:系统管理 / 系统设置 / Jenkins Location
系统管理员邮件地址 设为 admin@company.com
5.2.2 设置发件人帐号进入:系统管理 / 系统设置 / Extended E-mail Notification
“SMTP server” 设为 smtp.company.com
“Default user E-mail suffix” 设为 @company.com
“Use SMTP Authentication” 选中
“User Name” = admin@company.com(必须与管理员邮箱相同)
“Password” = **
“Use SSL” = on
“SMTP port” = 465
“Charset” = UTF-8
“Default Content Type” = HTML (text/html)
5.2.3 设置邮箱模板Default Subject: 构建通知:KaTeX parse error: Expected 'EOF', got '#' at position 16: PROJECT_NAME - #̲BUILD_NUMBER - $BUILD_STATUS
Default Content:

本邮件由系统自动发出,请勿回复!

构建结果 - ${BUILD_STATUS}

构建信息

失败用例

$FAILED_TESTS
最近提交(#$SVN_REVISION)

  • ${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="
  • %d [%a] %m
  • "}
详细提交: ${PROJECT_URL}changes
代码检查

FindBugs: ${BUILD_URL}findbugsResult
CheckStyle: ${BUILD_URL}checkstyleResult
PMD: ${BUILD_URL}pmdResult
也可以自定义 Jelly 模板,并在 Default Content 中引用 ${JELLY_SCRIPT, template="html_gmail"}: sudo mkdir -p /var/lib/jenkins/email-templates sudo cd /var/lib/jenkins/email-templates sudo wget https://github.com/jenkinsci/email-ext-plugin/raw/master/src/main/resources/hudson/plugins/emailext/templates/html_gmail.jelly

5.2.4 设置邮件触发时机点击 Default Triggers,比较好的方案是选中两项:Failure - Any ## 可定义“编译失败时”才向哪些人员发邮件(比如最近代码提交者)Success ## 可定义“构建成功时”才向哪些人员发邮件(比如所有产品关注者)
5.2.5 邮件可用变量点击 Content Token Reference 右侧的问号图标,可以看到各邮件模板中可引用变量的含义。
5.2.6 邮件未发送问题排查构建设置里指定的收件人只是 kevin,没有后续,希望采用插件 Email Extension Plugin 中的邮箱后缀,
却发现构建日志中报错: Failed to send e-mail to kevin because no e-mail address is known, and no default e-mail domain is configured
原来,扩展邮件插件有BUG,使用的是自带邮件插件的后缀设置,而后者之前没有设置。
点击 保存,保存邮件全局设置。
5.3 项目设置中启用邮件构建后操作步骤: 增加 Editable Email Notification(来自插件 Email Extension Plugin)。下图设置的效果是:构建失败时,向上次成功构建之后导致构建失败的 SVN 提交的人员发送邮件;构建成功时,向上次成功构建之后有 SVN 提交的人员、还有“Project Recipient List”中的人员发送邮件;
在这里插入图片描述
5.4 验证构建报告邮件分别按以下三种情形触发构建,都能看到构建报告邮件:手工触发:进入工程后,点击“立即构建”;定时触发构建:“构建触发器”只选中 Build periodically;版本提交触发构建:“构建触发器”只选中 Poll SCM。
在这里插入图片描述
6 Java/JUnit 单元测试
6.1 Maven 中设置插件(pom.xml)
<project …>



org.apache.maven.plugins
maven-surefire-plugin
2.19.1




6.2 修改 Jenkins 构建配置
“Build”标签页,Goals and options:确保去掉-Dmaven.test.skip=true即可。
6.3 构建后查看单元测试报告
在这里插入图片描述
7 单元测试覆盖率报告
7.1 安装插件JaCoCo plugin:与插件 Cobertura 一样,用于生成覆盖率报告,但比 Cobertura 更易用。
7.2 调整工程 pom.xml



org.jacoco
jacoco-maven-plugin
0.7.8


prepare

prepare-agent



report
package

report






7.3 调整项目的构建设置项目的构建设置 Post Build Action 中,增加 “Record JaCoCo coverage report”,并设置期望的覆盖率阈值。
在这里插入图片描述
在这里插入图片描述
7.4 构建并查看报告构建完成后,点击本次构建页的“Coverage Report”查看报告:
在这里插入图片描述
8 更多有用插件Folders Plugin:可嵌套地定义文件夹来级别 views / jobs;build timeout plugin:允许用户中止耗时太久的构建;Dingding[钉钉] Plugin:允许向阿里钉钉发送构建通知;TestNG Results Plugin: 用 TestNG 代替 JUnit;Publish Over SSH: 通过SSH发布文件或执行命令(使用SFTP的SCP)
作者:王克锋
出处:https://kefeng.wang/2017/01/06/jenkins/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值