Bootstrap

(三)手把手教你搭建Jenkins、gitlab,实现自动化部署配置测试报告发送邮件到指定用户

一、jenkins 介绍

1.背景

在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试;或者前后端分离后,经常会修改接口,然后重新部署;这些情况都会涉及到频繁的打包部署;
  手动打包常规步骤: 1.提交代码  2.问一下同组小伙伴有没有要提交的代码  3.拉取代码并打包(war包,或者jar包)  4.上传到Linux服务器  5.查看当前程序是否在运行  6.关闭当前程序  7.启动新的jar包  8.观察日志看是否启动成功  9.如果有同事说,自己还有代码没有提交……再次重复1到8的步骤!!!!!(一上午没了)  
  那么,有一种工具能够实现,将代码提交到git后就自动打包部署勒,答案是肯定的:Jenkins  当然除了Jenkins以外,也还有其他的工具可以实现自动化部署,如Hudson等  只是Jenkins相对来说,使用得更广泛。
  在这里插入图片描述

1.1 Jenkins是什么

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,可用于自动执行与构建,测试,交付或部署软件相关的各种任务,一款能提高效率的软件,它能把软件开发过程形成工作流。jenkisn使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。

1.2 Jenkins作用

持续、自动地构建/测试软件项目。
监控一些定时执行的任务。

1.3 Jenkins特性

  • 开源的java语言开发持续集成工具,支持CI,CD。(详解:https://editor.csdn.net/md?not_checkout=1&articleId=115718484
  • 易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。
  • 消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
  • 分布式构建:支持Jenkins能够让多台计算机一起构建/测试
  • 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
  • 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。

1.4 Jenkins的工作原理

目前持续集成(CI)已成为当前许多软件开发团队在整个软件开发生命周期内侧重于保证代码质量的常见做法。它是一种实践,旨在缓和和稳固软件的构建过程。并且能够帮助您的开发团队应对如下挑战:

  • 软件构建自动化 :配置完成后,CI系统会依照预先制定的时间表,或者针对某一特定事件,对目标软件进行构建。
  • 构建可持续的自动化检查 :CI系统能持续地获取新增或修改后签入的源代码,也就是说,当软件开发团队需要周期性的检查新增或修改后的代码时,CI系统会不断确认这些新代码是否破坏了原有软件的成功构建。这减少了开发者们在检查彼此相互依存的代码中变化情况需要花费的时间和精力
  • 构建可持续的自动化测试 :构建检查的扩展部分,构建后执行预先制定的一套测试规则,完成后触发通知(Email,RSS等等)给相关的当事人。
  • 生成后后续过程的自动化 :当自动化检查和测试成功完成,软件构建的周期中可能也需要一些额外的任务,诸如生成文档、打包软件、部署构件到一个运行环境或者软件仓库这样,构件才能更迅速地提供给用户
  • 使用部署一个CI系统需要的最低要求是,一个可获取的源代码的仓库,一个包含构建脚本的项目

持续集成得过程: 先把代码放到git、Jenkins从git获取代码进行构建、测试、生成结果再返回给客户端。
在这里插入图片描述

该系统的各个组成部分是按如下顺序来发挥作用的:

  • 开发者检入代码到源代码仓库
  • CI系统会为每一个项目创建了一个单独的工作区。当预设或请求一次新的构建时,它将把源代码仓库的源码存放到对应的工作区。
  • CI系统会在对应的工作区内执行构建过程。
  • (配置如果存在)构建完成后,CI系统会在一个新的构件中执行定义的一套测试。完成后触发通知(Email,RSS等等)给相关的当事人。
  • (配置如果存在)如果构建成功,这个构件会被打包并转移到一个部署目标(如应用服务器)或存储为软件仓库中的一个新版本。软件仓库可以是CI系统的一部分,也可以是一个外部的仓库,诸如一个文件服务器或者像Java.NET、 SourceForge之类的网站。
  • CI系统通常会根据请求发起相应的操作,诸如即时构建、生成报告,或者检索一些构建好的构件。
    Jenkins就是这么一个CI系统。之前叫做Hudson。

1.5 使用Jenkins的一些理由

  1. 是所有CI产品中在安装和配置上最简单的。
  2. 基于Web访问,用户界面非常友好、直观和灵活,在许多情况下,还提供了AJAX的即时反馈。
  3. Jenkins是基于Java开发的(如果你是一个Java开发人员,这是非常有用的),但它不仅限于构建基于Java的软件。
  4. Jenkins拥有大量的插件。这些插件极大的扩展了Jenkins的功能;它们都是开源的,而且它们可以直接通过web界面来进行安装与管理。

二、Jenkins的安装

2.1 Jenkins部署环境

搭建配置所需要的基本环境:  
1.jdk环境,Jenkins是java语言开发的,因需要jdk环境。
2.git/svn客户端,因一般代码是放在git/svn服务器上的,我们需要拉取代码。 
3.maven客户端,因一般java程序是由maven工程,需要maven打包,当然也有其他打包方式,如:gradle  
以上是自动化部署java程序jenkins需要的基本环境,请自己提前安装好,下面着重讲解Jenkins的安装部署配置。

2.2.Jenkins安装

jenkins 的安装有很多种,具体可以参照官方文档 https://jenkins.io/download/ ,因为我的操作系统是redhat 7,我这里使用 rpm 包进行安装,方便快捷。

  • 首先安装jdk环境:
    在这里插入图片描述
    查看安装版本

[root@jenkins ~]# java -version java version “1.8.0_181” Java™ SE
Runtime Environment (build 1.8.0_181-b13) Java HotSpot™ 64-Bit
Server VM (build 25.181-b13, mixed mode)

  • jenkins 的rpm包下载
    官网找到 RedHat 的地址:https://pkg.jenkins.io/redhat-stable/ 。
    下载rpm包:wget https://pkg.jenkins.io/redhat/ jenkins-2.155-1.1.noarch.rpm

  • 安装 Jenkins

[root@localhost local]# rpm -ivh jenkins-2.155-1.1.noarch.rpm warning:
jenkins-2.155-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID
d50582e6: NOKEY Preparing…
########################################### [100%] 1:jenkins ########################################### [100%]

看 jenkins 安装了哪些文件,目录介绍:

[root@localhost local]#rpm -ql jenkins
/etc/init.d/jenkins                #jenkins的启动文件
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins             #jenkins的配置文件(可以写改默认端口)
/usr/lib/jenkins                  
/usr/lib/jenkins/jenkins.war  #jenkins的程序war包
/usr/sbin/rcjenkins                #jenkins的为二进制文件
/var/cache/jenkins                 #jenkins的程序文件,运行程序解压出来的
/var/lib/jenkins                   #jenkins的主目录
/var/log/jenkins                   #jenkins的日志文件
  • 启动 Jenkins

1.查看服务状态
[root@localhost local]# service jenkins status jenkins 已停
启动 jenkins :sudo service jenkins start
开机自启动 :sudo chkconfig jenkins on

启动报如下错误:Starting Jenkins bash: /usr/bin/java: No such file or directory在这里插入图片描述
2.修改Jenkins启动配置文件,指定java安装路径。

vim /etc/init.d/jenkins
在candidates中第一行添加java路径,如下:
candidates="
/usr/local/jdk1.8.0_191/bin/java
/etc/alternatives/java
/usr/lib/jvm/java-1.6.0/bin/java
/usr/lib/jvm/jre-1.6.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/bin/java
"
再次启动jenkins
[root@localhost local]# service jenkins start
Starting Jenkins [确定]

3.防火墙

修改防火墙允许8080端口访问:firewall-cmd --zone=public --add-port=8080/tcp --permanent
重启防火墙生效:systemctl restart firewalld.service
查看所有打开的端口: firewall-cmd --zone=public --list-ports

4.修改jenkins端口

vim /etc/sysconfig/Jenkins
JENKINS_PORT=”8080″ 改成 JENKINS_PORT=”8888″ 默认8080端口,不冲突可以不修改
保存,重启jenkins服务:service jenkins restart
设置防火墙允许8888端口访问:firewall-cmd --zone=public --add-port=8888/tcp --permanent
这样jenkins端口就改成了8888
#查看端口是否已启动
[root@localhost local]# netstat -lunpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1068/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1144/master
tcp 0 0 :::8888 ::😗 LISTEN 1523/java
tcp 0 0 :::22 ::😗 LISTEN 1068/sshd
tcp 0 0 ::1:25 ::😗 LISTEN 1144/master
udp 0 0 0.0.0.0:68 0.0.0.0:* 954/dhclient

5.修改jenkins默认的操作用户

linux下jenkins默认使用jenkins用户进行脚本和文件的操作,如果不修改,在部署项目时需要调整涉及到的文件和目录的操作权限,可以调整jenkins配置文件,将用户修改为root用户。
vim /etc/sysconfig/jenkins
将JENKINS_USER="jenkins"调整为 JENKINS_USER=“root”

6.在本地浏览器中输入“http://IP:端口号”登录 jenkins,第一次登录Jenkins 会要求解锁

在这里插入图片描述
初始密码:cat /var/lib/jenkins/secrets/initialAdminPassword

7.安装插件

在这里插入图片描述
在这里插入图片描述

  1. 设置管理员账户密码

在这里插入图片描述
在这里插入图片描述

9.完成安装
在这里插入图片描述

2.3 Jenkins的插件以及配置

插件管理

jenkins系统管理比较重要的就是插件管理了 ,因为jenkins的工作全部是由插件来完成。

在插件管理中,有可更新、可选插件、已安装,日常的插件安装都是在这个界面上完成的。比如为了和gitlab协同,我们需要安装gitlab的插件。

在这里插入图片描述

;