Jenkins——Jenkins构建企业CI/CD持续集成持续发布平台

Posted Pakho`

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins——Jenkins构建企业CI/CD持续集成持续发布平台相关的知识,希望对你有一定的参考价值。

实现持续集成/持续发布的产品:开发(git)–> git主库 --> jenkins(git+jdk+tomcat+maven打包+测试)–>发布到tomcat服务器
CI:(continues intergration) 持续集成,代码合并,构建,测试合并,不断执行的过程,并对结果反馈
CD:(continues Deloyments) 持续发布 ,将代码部署到测试环境,预生产环境
CD:(continues Delivery) 持续部署,将最终的产品发布到生产环境,供用户使用

一、发布形式

平滑发布

什么叫平滑:在发布的过程中不影响用户的使用,系统不会因发布而暂停对外服务,不会造成用户短暂性无法访问;

灰度发布

什么叫灰度:发布后让部分用户使用新版本,其它用户使用旧版本,逐步扩大影响范围,最终达到全部更新的发布方式 ;

  • 灰度发布与平滑发布其实是关联的。当服务器的数量只有一台的时候,不存在灰度发布,一旦发布了就是所有用户都更新了;
  • 所以这个时候只有平滑发布。当服务器数量大于一台的时候,只要每台服务器都能达到平滑发布的方式,
  • 然后设定好需要发布的服务器占比数量,就可以实现灰度发布了。

AB发布

AB测试是为Web或App界面或流程制作两个(A/B)或多个(A/B/n)版本,在同一时间维度,分别让组成成分相同(相似)的访客群组随机的访问这些版本,收集各群组的用户体验数据和业务数据,最后分析评估出最好版本正式采用;

二、Jenkins概述

  • Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Husdson(Husdson是商用的),主要用于持续、自动的构建/测试软件项目、监控一些定时执行的任务。Jenkins用java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行
  • Jenkins通常与版本管理工具(SCM)、构建工具结合使用;常用的版本控制工具有SVN、GIT。Jenkins构建工具有Maven、Ant、Gradle

三、Jenkins 目标

  • 监控软件的开发流程
  • 快速显示问题
  • 提高开发效率
  • 过程控制

四、Jenkins特性

易于安装:不需要安装,不需要数据库,只需要通过java-jar jenkins.war或部署到一个servlet容器中
易于配置:所有的配置都可能通过jenkins提供的web界面完成,当然如果你喜欢,也可以通过手动修改xml文件进行配置
测试报告:生成jUnit或TestNG的测试报告,集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知
文件识别:jenkins能跟踪每次构建生成哪些jar包以及使用那个版本的jar包
分布式构建: 支持jenkins能够让多台计算机一起构建/测试
插件支持:jenkins可以通过第三方插件进行扩展,也可以根据团队需要开发插件
任务(job)和构建(build):任务:(job)是jenkins的一个执行计划,是一系列操作的集合

工作流程图
在这里插入图片描述

五、Jenkins部署配置详解

环境准备

总共使用三台服务器
使用Github官方服务器
192.168.100.10部署Jenkins (4G内存)
192.168.100.20部署Tomcat服务器
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm  #均安装epel扩展源

5.1 部署Git

一、安装依赖包

[root@jenkins ~]# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker 

二、Git官网下载Git安装包

[root@jenkins ~]# wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz

三、安装Git

[root@jenkins ~]# tar -xvzf git-2.9.5.tar.gz
[root@jenkins ~]# cd git-2.9.5
[root@jenkins git-2.9.5]# make prefix=/usr/local/git all      #编译Git源代码
[root@jenkins git-2.9.5]# make prefix=/usr/local/git install  #安装

四、修改环境变量

[root@jenkins git-2.9.5]# vim /etc/bashrc
PATH=$PATH:$HOME/bin:/usr/local/git/bin
[root@jenkins git-2.9.5]# source /etc/bashrc

五、测试是否安装成功

[root@jenkins git-2.9.5]# git --version
git version 1.8.3.1

5.2 JDK环境部署

版本使用 jdk-8u291-linux-x64.tar.gz

注:不能使用jdk9和jdk10 与本版本不兼容

一、解压安装

[root@jenkins ~]# tar -xvzf jdk-8u291-linux-x64.tar.gz -C /usr/local/
[root@jenkins ~]# cd /usr/local/
[root@jenkins ~]# mv jdk1.8.0_291/ jdk

二、修改环境变量

[root@jenkins ~]# vim /etc/bashrc
JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
[root@jenkins ~]# source /etc/bashrc

三、测试JDK

[root@jenkins ~]# java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)

5.3 部署Maven

一、下载和解压Maven

[root@jenkins ~]# wget https://mirrors.bit.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
[root@jenkins ~]# tar -xvzf apache-maven-3.5.4-bin.tar.gz -C /usr/local/ #解压到/usr/local
[root@jenkins ~]# mv /usr/local/apache-maven-3.5.4/ /usr/local/maven     #更名为maven

二、修改环境变量

[root@jenkins ~]# vim /etc/bashrc
export M2_HOME=/usr/local/maven
export M2=$M2_HOME/bin
PATH=$M2:$PATH:$HOME/bin:/usr/local/git/bin
export JAVA_HOME=/usr/local/jdk                                          #声明环境变量
export PATH
[root@jenkins ~]# source /etc/bashrc

三、测试Maven

[root@jenkins ~]# mvn -version
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_291, vendor: Oracle Corporation, runtime: /usr/local/jdk/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"

5.4 部署TOMCAT

一、解压部署

[root@jenkins ~]# wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.46/bin/apache-tomcat-9.0.46.tar.gz
[root@jenkins ~]# tar -xvzf apache-tomcat-9.0.46.tar.gz -C /usr/local/
[root@jenkins ~]# mv /usr/local/apache-tomcat-9.0.46/ /usr/local/tomcat

二、定义Tomcat所需环境变量

[root@jenkins ~]# vim /etc/profile
CATALINA_HOME=/usr/local/tomcat
export CATALINA_HOME
[root@jenkins ~]# source /etc/profile

三、启动TOMCAT

[root@jenkins ~]# /usr/local/tomcat/bin/startup.sh

四、测试TOMCAT

http://192.168.100.10:8080/

在这里插入图片描述
五、关闭TOMCAT

上传代码前记得关闭TOMCAT

[root@jenkins ~]# /usr/local/tomcat/bin/shutdown.sh

5.5 部署Jenkins

一、官方下载Jenkins

下载2.296

[root@jenkins ~]# wget http://updates.jenkins-ci.org/download/war/2.296/jenkins.war

二、部署Jenkins.war到TOMCAT下

[root@jenkins ~]# cp jenkins.war /usr/local/tomcat/webapps/

附:jenkins忘记密码重置步骤对照表

Jenkins重置
关闭Tomcat /usr/local/tomcat/bin/shutdown.sh
rm -rf /usr/local/tomcat/webapps/jenkins*
rm -rf ~ /.jenkins*
cp jenkins.war /usr/local/tomcat/webapps
启动tomcat即可访问jenkins

三、启动TOMCAT

注意:启动TOMCAT会自动解压webapps下的war包

[root@jenkins ~]# /usr/local/tomcat/bin/startup.sh

四、登陆Jenkins

http://192.168.100.10:8080/jenkins

出现如下界面后将红色一行复制进服务器进行查看
在这里插入图片描述

[root@jenkins ~]# cat /root/.jenkins/secrets/initialAdminPassword
55b1bb2b1d164668b1def74e32240d89

点击安装推荐插件
在这里插入图片描述

会自己安装插件但是会发生报错 需要手动下载插件解决
在这里插入图片描述

安装过程可能出现报错,没关系,点击重新下载即可,如还是不行,请手动下载安装

创建用户
在这里插入图片描述点击保存并完成
在这里插入图片描述
配置完成后的提示
在这里插入图片描述

http://192.168.100.10:8080/jenkins/

在这里插入图片描述完成Jenkins前后台部署
在这里插入图片描述

5.6 管理插件

简介:我们配置的是 git+maven方式的自动化部署 所有git和maven的相关插件是必须的 还有一个ssh基于机器间的文件传送
Git插件访问代码仓库 maven插件调用压缩打包工具 ssh插件用于文件传输
安装过程请耐心等待

一、安装插件 Deploy to container

  • 作用:支持自动化将代码部署到tomcat容器
  • 安装过程:系统管理 --> 插件管理 --> 可选插件 -->过滤Deploy to container --> 勾选,点击下面的按钮直接安装,时间可能较久,等待即可

在这里插入图片描述选择安装后重启
在这里插入图片描述
二、安装插件 Maven integration

  • 作用:Jenkins利用Maven编译,打包,所需插件
  • 安装过程:同第一个插件
    在这里插入图片描述

三、安装Git相关三个插件

  • GitHub Authentication
  • GitHub Branch Source
  • GitHub Organization Folder

四、安装插件 Publish Over SSH

5.7 Jenkins系统设置

与前方程序进行调用并关联

注意:没有强调的都设置为默认即可

路径:系统管理->(全局工具配置)Global Tool Configuration,配置jdk,git,maven的根目录

一、找到全局工具箱在这里插入图片描述
二、配置jdk目录

配置JDK根目录,注意不能是JDK9.0,切记

取消自动安装勾选 选择自己的安装路径
在这里插入图片描述三、配置git目录
在这里插入图片描述四、配置Maven并保存
在这里插入图片描述
五、点击全局保存
在这里插入图片描述

六、关于重启Jenkins

    http://192.168.100.10:8080/jenkins/restart
    http://192.168.100.10:8080/jenkins/stop
    http://192.168.100.10:8080/jenkins/reload

5.8 SSH设置

目的:(192.168.100.10) jinkens 服务器上的maven将开发产生的*.war包。通过SSH自动推送到远程tomcat服务器上(192.168.100.20)。需要手工配置sshkey。配合自动化推送
192.168.100.10是Jenkins
192.168.100.20是tomcat网站服务器,代表业务服务器

一、Jenkins服务器准备秘钥认证

这里的192.168.100.20是一台tomcat服务器,什么都不用安装,接受代码即可

[root@jenkins ~]# ssh-keygen
[root@jenkins ~]# ssh-copy-id 192.168.100.20
[root@jenkins ~]# ssh 192.168.100.20
Last login: Tue Jun  8 22:37:05 2021 from 192.168.100.10
[root@tomcat ~]# 

二、在Jenkins服务器准备秘钥认证

[root@jenkins ~]# cat .ssh/id_rsa
...                                             #秘钥略

三、进入Jenkins系统设置
在这里插入图片描述如下图配置完成后记得 保存
在这里插入图片描述

5.9 新建任务

一、创建任务
在这里插入图片描述
二、定义名称和类型
在这里插入图片描述

三、设置Maven

公有Git仓库

① 设置描述
在这里插入图片描述

② 选择版本控制器和仓库地址
在这里插入图片描述
③ 设置触发器(保持默认)
在这里插入图片描述
④ 设置构建(编译打包)
在这里插入图片描述
⑤ 构建后操作

在构建设置中选择:(send build artifacts over ssh)通过ssh发送构建文件

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

关于构建后文件的配置说明
SSH Server Name因为之前的配置会默认出现tomcat业务服务器的名字
Source file构建之后,在jenkins服务器上是可以自动看到war包的。(该路径不需要创建)ls /root/.jenkins/jobs/testjob1/builds/target/*.war
Remove prefix自动删除路径前缀(不需要创建路径前缀)
Remove directorytomcat业务服务器上的路径,需要提前在192.168.100.11(tomcat)上创建该目录用来存放网站源代码(需要后台创建)
Exec commandtomcat(192.168.100.20)在接收到源码之后的自定义操作比如:将源码拷贝到网站的主目录(/jenkins),并执行一些其他操作如重启服务器等(或创建文件touch 需要后天创建)

⑥ 为TOMCAT服务器创建相应文件

[root@tomcat ~]# mkdir /jenkins/war -p           #创建用于存放源代码的目录

tomacat(192.168.100.20)在接受到源码之后的自定义动作
比如:将源码拷贝到网站主目录(/jenkins),并执行一些其他操作如重启服务器等(或创建文件touch)(需要后台创建)

[root@tomcat ~]# mkdir /jenkins/sh               #创建脚本目录
[root@tomcat ~]# vim /jenkins/sh/deploy.sh       #创建待执行脚本,如果构建任务执行完成,此脚本也必须执行完成,否则认为失败
touch /root/aaa.txt
touch /root/bbb.txt
[root@tomcat ~]# chmod +x /jenkins/sh/deploy.sh  #为脚本授权

关于创建脚本的解释:
创建脚本的目的是为了验证自动化构建之后能否执行一些我们自己的想法
因为目前为测试,不需要安装网站环境,所以这里以创建文件进行代表

5.10 构建任务

一、立即构建
在这里插入图片描述
在这里插入图片描述
点击下方构建的任务
在这里插入图片描述
进入控制台输出
在这里插入图片描述等待大约5分钟提示完成
在这里插入图片描述

如果出现error,检查前边配置

绿色为正常
在这里插入图片描述

二、查看构建结果
在这里插入图片描述

[root@tomcat ~]# ls /jenkins/war/
easy-springmvc-maven.war               #此包为Github官网下载的软件包
[root@tomcat ~]# ls                    #查看脚本是否运行成功
aaa.txt  bbb.txt

实验完成!

六、总结一下

  • Jenkins属于较高端的技术,12k工资以上都要求掌握Jenkins
  • 重点难点部分本人觉得在于Jenkins配置部分,还是多操作多积累吧,END

以上是关于Jenkins——Jenkins构建企业CI/CD持续集成持续发布平台的主要内容,如果未能解决你的问题,请参考以下文章

CI/CD——构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台

Jenkins企业应用

CI/CD之jenkins

CI/CD之jenkins

CI/CD技术专题「Jenkins实战系列」jenkins+pipeline构建自动化部署

jenkins快速入门,自动构建一个hello world项目(devops,ci/cd)