目录

云原生-DevOps一文掌握持续集成工具-Jenkins

【云原生 • DevOps】一文掌握持续集成工具 Jenkins

https://i-blog.csdnimg.cn/blog_migrate/6e29d65211120032052034373eea8d21.jpeg

目录


一、持续集成工具 Jenkins 介绍

1. 什么是持续集成

持续集成(Continuous Integration,CI)。随着软件开发复杂度的不断提高,如何更好的协同开发以确保软件开发质量已经成为了开发团队所追求的目标,特别是近年来 “敏捷开发” 在互联网领域的兴起,如何能够在不断变化的需求中快速适应和保证开发质量显得尤为重要。

持续集成就是针对这类问题的一种软件开发实践,倡导团队必须经常集成他们的工作,而每次的集成都是通过自动化的构建来验证的,包括自动编译、发布、测试,从而更快发现集成错误,让团队更快的开发内聚的软件。

持续集成具有以下特点:

  • 是一个自动化的周期性的集成测试过程,从检出代码、编译构建、运行测试,再到结果记录、测试统计等都是自动完成,无需人工干预
  • 需要有专门的集成服务器来执行集成构建
  • 需要有代码托管工具支持

持续集成的出现,保证开发团队交代码的质量,减轻了软件发布时的压力;其次就是全程自动完成,无需太多人工干预,极大的减少了重复的过程,节省了时间、工作量和成本。

2. Jenkins 介绍

Jenkins 原名 Hudson,2011 年修改为 Jenkins,它是一个

开源的实现软件持续集成的工具 。官网地址如下(也有中文网址):

[Jenkins

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software

https://i-blog.csdnimg.cn/blog_migrate/8c67d58db19b5f4a10238d1d753288af.png “Jenkins”)

Jenkins 能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还可以用图表的形式形象的展示项目构建的趋势和稳定性。

Jenkins 具有以下特点:

  • 易安装:官网下载直接运行
  • 易配置:提供了友好的 GUI 配置界面
  • 变更支持:能从代码仓库中获取并产生代码更新列表,输出到编译输出信息
  • 支持永久链接:用户是通过 Web 来访问 Jenkins 的,而这些 Web 界面的链接地址是永久的,可在任何文档中直接使用
  • 集成 E-mail/RSS/IM
  • JUnit/Test NG 测试报告:以图表形式提供测试报告
  • 文件指纹信息:会保存哪次集成构建产生了哪些 jars 文件,哪次集成使用了哪个版本的 jars 文件等记录
  • 支持第三方插件

二、Jenkins 的安装与部署

1. 安装 Jenkins

第一步,下载 Jenkins 安装包,打开 ;

https://i-blog.csdnimg.cn/blog_migrate/47a711be8e5facd5e40a5f2d8bb1072b.png

点击 “Installing Jenkins”,可以看到可供下载的各个版本;

https://i-blog.csdnimg.cn/blog_migrate/a8b564dc0d2d66f041acbf61ec492336.png

选择 Linux (演示虚拟机为 CentOS 系统) 下的 CentOS 系统;

https://i-blog.csdnimg.cn/blog_migrate/9e56e3cb12ffa9ce27e13c48c643750a.png

可以看到官方提供的在线安装方式;

https://i-blog.csdnimg.cn/blog_migrate/a2b50b654bab8d362655a42a7c962745.png

打开 Xhell 并连接虚拟机/服务器,按照以下步骤进行下载;

# 下载镜像
wget -O /etc/yum.repos.d/jenkins.repo \
    https://pkg.jenkins.io/redhat-stable/jenkins.repo

# 安装
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

# 更新
yum upgrade
 
# 安装 Java 环境
yum install java-11-openjdk

#安装 Jenkins
yum install jenkins

2. 本地访问 Jenkins

Jenkins 安装完成之后,就可以使用

虚拟机/服务器IP : 端口 在本地进行访问了,初始界面如下;

https://i-blog.csdnimg.cn/blog_migrate/c9d13848794b56c222974bc07aaf7e72.png

根据提示密码存于 /var/lib/jenkins/secrets/initialAdminPassword 目录中;

https://i-blog.csdnimg.cn/blog_migrate/c4bebca437ba79ce1e1d477669688bab.png

输入密码后进入如下界面;

https://i-blog.csdnimg.cn/blog_migrate/0437a113dccf75b79ba31996088d7c9a.png

我们选择安装推荐的插件,Jenkins 便会开始自动下载安装,如下正在安装;

https://i-blog.csdnimg.cn/blog_migrate/ab8eaf835d435e598070226103e317f3.png

安装完成后,创建我们的第一个用户;

https://i-blog.csdnimg.cn/blog_migrate/ad7914d68763c6ec477eae877006bc5d.png

进入 Jenkins 主页如下;

https://i-blog.csdnimg.cn/blog_migrate/989f9084df7ea79e8cdb44f424ff8923.png

3. 插件的安装

使用推荐安装方式只能帮我们安装一部分最为常用的插件,有某些插件如 maven 等还是需要我们手动去安装的。

点击 “系统管理” –> “插件管理”;

https://i-blog.csdnimg.cn/blog_migrate/8ee059c96936230518c1a06f501b9989.png

在这里可以看到我们需要的插件,按需下载即可;

https://i-blog.csdnimg.cn/blog_migrate/e7fdfbe5f9fa14577d60cf92a3aec459.png

4. 卸载 Jenkins

# rpm卸载Jenkins
rpm -e jenkins

# 检查是否卸载成功
rpm -ql jenkins

# 彻底删除残留文件
find / -iname jenkins | xargs -n 1000 rm -rf

三、Jenkins 全局配置

全局配置的目的在于 告诉 Jenkins 各种工具的路径在何处 ,使得 Jenkins 能够通过插件来调用这些软件。我们这里均采用下载压缩包然后上传虚拟机/服务器的方式进行演示。

点击“系统管理” –> “全局配置”,可以看到需要配置的插件,需要配置的有 jdk、git、maven 工具;

https://i-blog.csdnimg.cn/blog_migrate/7eca94a8e829c619f67071144cbcf519.png

1. Git 的安装与配置

(直接使用 yum 命令安装虽然更为简单但版本会很低,为防止今后报错所以推荐此方式安装)

首先下载 git 压缩包并上传至虚拟机/服务器;

https://i-blog.csdnimg.cn/blog_migrate/ab0553967f01b8b8f9299112cbd9292b.png

按照以下步骤进行操作;

#1.解压压缩包
tar -zxvf git-2.27.0.tar.gz

#2.在Linux系统中是需要编译源码的,首先下载所需要的依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

#3.卸载旧版本的 git(安装依赖是会自动安装 git,所以需要卸载旧版本)
yum -y remove git

#4.进入解压后的文件夹
cd git-2.27.0

#5.编译git源码
make prefix=/usr/local/git all

#6.安装git至/usr/local/git路径
make prefix=/usr/local/git install

#7.配置环境变量
vi /etc/profile 
在底部加上该行代码:export PATH=$PATH:/usr/local/git/bin

#8.配置完成后刷新环境变量
source /etc/profile

操作完成之后使用命令

git –version 查看 git 版本,如下 2.27 版本安装成功;

[root@192 git-2.27.0]# git --version
git version 2.27.0

此时我们查看一下 git 路径

which git ;

[root@192 git-2.27.0]# which git
/usr/local/git/bin/git

使用该路径设置全局配置;

https://i-blog.csdnimg.cn/blog_migrate/baf77cce727750fbe5abe4677a6ae977.png

2. JDK 的安装与配置

下载一个 jdk 的 rpm 包并上传至虚拟机/服务器;

https://i-blog.csdnimg.cn/blog_migrate/580e63e68b5f00f9512009d1cb901623.png

然后使用命令

rpm -ivh jdk-8u171-linux-x64.rpm 进行安装;

https://i-blog.csdnimg.cn/blog_migrate/845c2ac805d7c3effeabcbc5ab54f5dc.png

安装后的根目录为 /usr/java/jdk1.8.0_171-amd64;

https://i-blog.csdnimg.cn/blog_migrate/0c081399231d903086860682101f6c89.png

使用此路径设置全局;

https://i-blog.csdnimg.cn/blog_migrate/e07b151c962bbb920b9387554182683e.png

3. maven 的安装与配置

下载 apache-maven .tar.gz 包并上传至虚拟机/服务器;

https://i-blog.csdnimg.cn/blog_migrate/bef40d538802544bc729bf1360da7346.png

解压压缩文件;

https://i-blog.csdnimg.cn/blog_migrate/7b7a3c6ccf48198d406f8bceb3aabca6.png

使用此路径及解压后的文件名设置全局;

https://i-blog.csdnimg.cn/blog_migrate/8f6f83f2c98be2a282eba38b07aeacab.png

全部配置完成之后,点击保存、点击应用。

https://i-blog.csdnimg.cn/blog_migrate/9926014981ec2d49a578df37d96f69ff.png

三、将代码上传至 Git 服务器

1. Gogs 的搭建与配置

Gogs 是一款极易搭建的自助 Git 服务,它的目标在于打造一个最简单、快速和轻松的方式搭建 Git 服务。使用 Go 语言开发的它能够通过独立的二进制进行分发,支持了 Go 语言支持的所有平台,包括 Linux、Mac OS、Windows 以及 arm 平台。

与传统 Git 相比它最大的优势在于拥有图形化界面 。

第一步:下载镜像

docker pull gogs/gogs ;

[root@192 ~]# docker pull gogs/gogs
Using default tag: latest
latest: Pulling from gogs/gogs
97518928ae5f: Pull complete 
d20a5437c0b4: Pull complete 
ec9934e62f5f: Pull complete 
2a880a4f6876: Pull complete 
7bb13647629b: Pull complete 
641b202f48eb: Pull complete 
8f12f9a5cd7d: Pull complete 
Digest: sha256:fbae7c126411d3fa3f8fdca17a65b196887ab23e3b7375f682a13daf5806bb19
Status: Downloaded newer image for gogs/gogs:latest
docker.io/gogs/gogs:latest
[root@192 ~]# 

第二步:创建 Gogs 容器

docker run -di –name=gogs -p 10022:22 -p 3000:3000 -v /var/gogsdata:/data gogs/gogs ;

容器名称 gogs

端口映射,22 端口映射为 10022,3000 端口映射为 3000

[root@192 ~]# docker run -di --name=gogs -p 10022:22 -p 3000:3000 -v /var/gogsdata:/data gogs/gogs
3af9726ff2d9430be43f7f3d78c206b9a53d356347e8a92c23316a7d2e6533f8
[root@192 ~]# 

第三步:在本地浏览器进行访问,初始界面如下;

https://i-blog.csdnimg.cn/blog_migrate/aad716d9d27f543f116e16b40924ff15.png

此处选择数据库类型为 SQLite3

修改域名为 192.168.200.129

修改应用 URL 为 http://192.168.200.129:3000/

https://i-blog.csdnimg.cn/blog_migrate/c753b8247678e94c82aa3deb6c9c749d.png

随后点击“立即安装”,Gogs 安装与配置完成;

https://i-blog.csdnimg.cn/blog_migrate/f10631d45ffe6be2aed946a6dce67f25.png

2. 将本地代码上传至 Gogs 的仓库

首先我们创建一个仓库;

https://i-blog.csdnimg.cn/blog_migrate/9ab290ae79d392400765635860ea7331.png

创建成功后就可以将代码上传至仓库了;

https://i-blog.csdnimg.cn/blog_migrate/ed7f45bcef83ebbe97406c672369f8f5.png

这里我使用 idea (本地 git 环境已搭建,这里不再赘述) 以及一个示例项目演示上传操作;

https://i-blog.csdnimg.cn/blog_migrate/d38503ecc2f724ffed48cb57f0cf924b.png

选中项目,右键点击 “file” –> “git” –> “Repository” –> “Reomtes”;

https://i-blog.csdnimg.cn/blog_migrate/954fb7a10d1f84da993b97a0ceb5a573.png

接下来增加远程地址,也就是我们 Gogs 远程仓库的地址;

https://i-blog.csdnimg.cn/blog_migrate/235eb4bc292bd30693105ea92bcdb009.png

此时就可以进行代码上传了,先点击 “Git” –> “Add”,将项目上传至暂存区;

https://i-blog.csdnimg.cn/blog_migrate/63e3050f1a616f7d1f77b01a11ba4a21.png

选择 “git” –> “Repository” –> “push” 进行推送;

https://i-blog.csdnimg.cn/blog_migrate/fd071330211b503b46c3c673e3aa4629.png

输入用户名和密码登录 Gogs 后即可推送成功;

https://i-blog.csdnimg.cn/blog_migrate/0748624e890c34e483cf5beb0b767f61.png

此时再次查看 Gogs 中的仓库,可以看到项目已上传至 Gogs 仓库;

https://i-blog.csdnimg.cn/blog_migrate/9d7cb5411583dbbb05a49f472876359e.png

https://i-blog.csdnimg.cn/blog_migrate/e1df083bb7f1b3f627fcc16b76071aba.png

代码上传至 Git 演示成功。

四、任务的创建与执行

登入 Jenkins,点击 “新建 Item”,输入任务名称并选择“构建一个maven项目”;

https://i-blog.csdnimg.cn/blog_migrate/da8e5cb7c2b2dc7292f24ba9e7bbe0b4.png

点击“确定”,之后我们作出如下配置;

项目描述

https://i-blog.csdnimg.cn/blog_migrate/f2361a562146b0305d4f6c1777a9d661.png

源码管理

https://i-blog.csdnimg.cn/blog_migrate/23d5f5462ae5ecf2067df457452a5a81.png

build

https://i-blog.csdnimg.cn/blog_migrate/65d4005069ac9e4282e34f0bd547ac64.png

配置完成,点击保存,项目即创建完成;

https://i-blog.csdnimg.cn/blog_migrate/a78ffa56d95dffb40ff48a0002d4dfa9.png

返回面板,点击按钮执行此任务;

https://i-blog.csdnimg.cn/blog_migrate/eee95016f35c701bbbb753bb7b9959e0.png

此操作相当于我们将项目文件的执行过程拿到了 Jenkins 系统当中。