持续集成 简介&环境搭建

时间:2022-01-08 14:24:32

1. 持续集成简介

2. 持续集成环境搭建(Jenkins)

1. 持续集成简介

1.1 持续集成的作用

随着互联网的蓬勃发展,软件生命周期模型也经历了几个比较大的阶段,从最初的瀑布模型,到 V 模型,再到现在的敏捷或者 devops,不论哪个阶段,项目从立项到交付几乎都离不开以下几个过程,开发、构建、测试和发布,而且一直都在致力于又好又快地完成软件的交付。

然而大多数互联网公司面临的常态却是,临近上线日全员待命,如临大敌,通宵达旦,生怕出现上线事故导致版本回滚,即使暂时上线成功后也可能会出现明明测试环境全部通过了,却依然有各种线上质量问题频发。这些现象的主要原因就是代码合并的太晚,而且每次改动未经过充分的测试,代码合并时出现冲突,为了解决冲突重新修改代码,新修改的代码又有可能会引发新的问题,进入了恶性循环。

那么如何才能快速的合并代码,快速的构建,快速的测试,快速的发布高质量的代码呢?持续集成就应运而生了,它的宗旨就是多次合并代码,合并完成后在各种环境下进行多次充分的测试,保证版本的可用性和代码更改的正确性。

1.2 持续集成的定义

持续集成 简介&环境搭建

我们经常听到的持续工程方法有 3 个,分别为持续集成(Continuous Integration,CI)、持续交付(Continuous Delivery,CD)和持续部署(Continuous Deploy,CD)。

  • 持续集成:指的是在一定时间内,开发人员多次将代码合并到同一主干上。代码入库后将代码编译打包成可以发布的形式,先发布到测试环境进行详细全面的测试(如果是代码修复的情况下可以根据实际情况只进行精准的测试),测试环境通过后再发布到预生产环境,最终部署到线上环境。目的就是频繁的集成以便发现其中的错误。
  • 持续交付:强调的是短时间内完成可以随时发布的软件产品,对每一个进入主干分支的代码提交后,构建打包,测试环境验证通过,预发布环境进行验证,保证产品是可发布的状态。目的是快速地得到市场的反馈,以便更好地进行开发和设计。
  • 持续部署:将每一次代码提交后,都构建出产品直接上线,交付给用户使用。

以上 3 个流程的本质都是为了保证每一次代码合并后都能经过一系列的验证,保证这些变更的质量。以下是 3 个持续过程的流水线示意图:

持续集成 简介&环境搭建

1.3 持续集成的原则

测试要尽量的充分

因为持续集成最终的目的是保证版本的可用性,而且由于多人协作,合并后的代码有可能对整个的软件都会有影响,所有一般情况下需要把所有的测试流程都走一遍,比如静态代码扫描、单元测试、功能测试、接口测试、性能测试等等;如果只是修复了一些 bug,代码改动不大的情况下,可以只做一些针对性测试。

测试的速度要尽可能的快

持续集成中每天都会有代码合并,甚至一天有好几次合并,如果测试的效率不够高的话很可能会出现一个打包的版本还测试完成,新的版本就已经出现了,甚至积压几个版本,这样的话就不能及时的发现是哪个版本出现的问题,而且开发一直是在有问题的版本上进行的修改,所以这就要求测试的速度要快,自动化测试肯定是不可或缺的,甚至还要并行或者分布式执行测试。

尽量使用和生产环境类似的环境进行测试

如果持续集成采用的测试环境和线上环境差异太大的话,测试的结果很可能是不准确的,有些线上的问题也是很难发现的,特别是关于性能测试的结果,资源和锁等问题。所以采用和线上环境完全一样的环境时最理想的,如果条件不允许的话要尽可能采用同比例缩小的环境进行测试,以保证测试结果的准确性。

1.4 整体流程

持续集成 简介&环境搭建

2. 持续集成环境搭建

Win10 + Jenkins 2.277.2 + JDK 1.8 + Maven + Git + Tomcat

2.1 Git 安装

1)登录官网下载安装包:官网 https://git-scm.com/download/win

持续集成 简介&环境搭建

2)下载完成后双击安装,如下图所示:

持续集成 简介&环境搭建

双击 exe 文件,一路 next 即可。

3)配置环境变量:将 Git 的 bin 目录 添加到环境变量。

4)注册 github 账号

登录 https://github.com/ 注册账号。

2.2 JDK 1.8 安装

1)登录官网,下载 jdk 1.8

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

先选择 Accept,然后根据自己电脑 选择对应 windows 下的文件:

持续集成 简介&环境搭建

下载完成后的文件为 jdk-8u211-windows-x64.exe。

2)安装

单击 jdk-8u211-windows-x64.exe。

3)配置 java 环境变量

配置 JAVA_HOME:

持续集成 简介&环境搭建

配置 path:

持续集成 简介&环境搭建

新增环境变量 CLASSPATH:

.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib

持续集成 简介&环境搭建

配置完成后点击所有的确定按钮。

4)确认安装成功

启动 cmd,输入 java -version,如下结果表示安装并配置成功:

持续集成 简介&环境搭建

2.3 Tomcat 安装

这里选择 tomcat8 为示例。

1)登录官网下载解压版本

https://tomcat.apache.org/download-80.cgi

持续集成 简介&环境搭建

2)解压缩

将下载后的文件解压到指定的目录,比如:D:\program2.5.3.

3)修改编码方式

Jenkins 建议在 tomcat 中使用 utf-8 编码 , 配置 tomcat 下 conf 目录的 server.xml 文件:

持续集成 简介&环境搭建

4)在 windows 下用浏览器访问

浏览器输入:127.0.0.1:8080

持续集成 简介&环境搭建

5)修改 tomcat 配置文件

接下来我们在 Jenkins 的 maven 任务中采用 Deploy war/ear to a Container 的方式,而要将 war 包到 tomcat 下,需要配置 tomcat 的配置文件 tomcat/conf/tomcat-users.xml,将名为 tomcat 的用户配上以下四个角色:admin-gui、manager-gui、manager-script 和 manager-jmx,这样才可以使用 tomcat 这个用户完成远程部署的功能。

打开 tomcat 安装目录下的  tomcat-users.xml 文件,在文件底部加入如下内容:

<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-gui" />
<role rolename="manager-script" />
<role rolename="manager-status" />
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="deploy" password="tomcat" roles="manager-gui,manager-script,manager-status" />

持续集成 简介&环境搭建

2.4 Maven 简介和安装

Maven 简介

定义

  • Maven 基于 POM(工程对象模型),通过一小段描述来对项目的代码、报告、文件进行管理的工具。
  • Maven 是一个跨平台的项目管理工具,它使用 java 开发,依赖于 jdk1.6 及以上。
  • Maven 主要有两大功能:管理依赖(依赖指的就是 jar 包) 、项目构建。

什么是构建?

持续集成 简介&环境搭建

构建过程:

持续集成 简介&环境搭建

项目构建的方式

  • Eclipse:使用eclipse进行项目构建,相对来说,步骤比较零散,不好操作。
  • Ant:它是一个专门的项目构建工具,它可以通过一些配置来完成项目构建,这些配置要明确的告诉 ant,源码包在哪?目标 class 文件应该存放在哪?资源文件应该在哪等。
  • Maven:它是一个项目管理工具,也是一个项目构建工具。通过使用 maven,可以对项目进行快速简单的构建,它不需要告诉 maven 很多信息,但是需要按照 maven 的规范来进行代码的开发。也就是说 maven 是有约束的。

Maven 安装

1)登录官网下载解压版本

进入官网:http://maven.apache.org/download.cgi,下拉页面找到 files,如下所示:

持续集成 简介&环境搭建

2)解压缩

3)配置环境变量 MAVEN_HOME

maven 的安装过程中会自动添加 %M2_HOME%(Jenkins 中使用的也是 M2_HOME,所以务必添加到环境变量),并且将 %M2_HOME%\bin 加入到 path 中。但是有一些项目仍引用 MAVEN_HOME,为了保险起见,也将其配置到环境变量中。

4)验证安装成功

启动命令行,输入:mvn --version

持续集成 简介&环境搭建

2.5 Jenkins 安装和基础配置

1)下载 Jenkins 的 war 包

官网链接:https://Jenkins.io/download/

持续集成 简介&环境搭建

向下滑动页面,可以看到有 LTS 和 Weekly 两种版本,版本建议下载 LTS 版本,Weekly 版本每周都会更新,更新频率太快。

持续集成 简介&环境搭建

2)将 war 包放到 tomcat 的 webapps 下

3)启动 tomcat

上一步已经把 war 包放到了 tomcat 的 webapps 目录下,进入 tomcat 的 bin 目录,单击 startup.bat,启动 tomcat 后就可以直接在浏览器中访问了:http://127.0.0.1:8080/Jenkins

4)解锁 Jenkins

持续集成 简介&环境搭建

根据提示打开以下文件,将管理员密码粘贴到网页中:

持续集成 简介&环境搭建

持续集成 简介&环境搭建

或使用命令行:type + 文件名

持续集成 简介&环境搭建

5)解决离线问题(没有提示离线,直接跳过此步)

弹出的页面显示离线,如下所示:

持续集成 简介&环境搭建

有以下两种解决方案:

A)选择跳过插件安装,进入 Jenkins 后根据需要自行安装,但是安装插件前也是需要进入到插件管理修改配置。

B)修改配置文件:

将 C:\Users\kongsh\.Jenkins\hudson.model.UpdateCenter.xml 文件中的 url 更改为如下值:https://mirrors.tuna.tsinghua.edu.cn/Jenkins/updates/update-center.json

持续集成 简介&环境搭建

或者更改为 http://updates.Jenkins.io/update-center.json ,即去掉 s(采用),如下:

持续集成 简介&环境搭建

解决方案 B 是推荐的, 可彻底解决插件安装慢问题, 不过要先安装中文插件, 可以先通过前面两种方法安装该插件(https://blog.csdn.net/qq_23483671/article/details/105337733)。

重启 tomcat,刷新页面后,显示正常:

持续集成 简介&环境搭建

选择默认安装插件的话,此过程需要一段时间,而且根据网络不同有些插件安装不成功,但是之后可以自己再安装即可;也可以自定义选择指定的插件。接下来我们安装推荐的插件。

6)安装推荐的插件

单击左侧的安装推荐的插件按钮:

持续集成 简介&环境搭建

安装过程如下:

持续集成 简介&环境搭建

7)创建管理员账号

持续集成 简介&环境搭建

8)设置 Jenkins 访问地址 URL

持续集成 简介&环境搭建

我们会有直接想通过 http 方式运行 Jenkins job 的需求,这样就不需要每次都进入 Jenkins 的页面了(本机的话就是 127.0.0.1)。

9)进入 Jenkins

持续集成 简介&环境搭建

若之后 Jenkins 卡住,则重启 tomcat 即可。

10)进入登录页面,输入用户名和密码即可

持续集成 简介&环境搭建

2.6 Ngrok 安装

GitHub 收到提交的代码后要主动通知 Jenkins,所以 Jenkins 所在服务器一定要有外网 IP,否则 GitHub 无法访问,解决方法:下载 ngrok,将 IP 暴露到网络(类似的工具还有 holer)。

1)下载

登录到 https://ngrok.com/download 下载 ngrok 压缩包,选 windows 版本:

持续集成 简介&环境搭建

2)解压缩

将 ngrok-stable-windows-amd64.zip 文件解压到指定的目录,比如:F:\ngrok-stable-windows-amd64

3)获取 ngrok 的 token

切换到官网并进行登录(可用 github 账号登录):

持续集成 简介&环境搭建

获取 token:

持续集成 简介&环境搭建

4)认证 token

切换到解压后的目录,执行命令进行认证:ngrok authtoken <your token>

持续集成 简介&环境搭建

5)启动 ngrok

在 ngrok 所在的目录执行:ngrok http 8080(8080 是 tomcat 的监听端口),拷贝 forwarding 指示的 ip,后续会用到(注意:cmd 的窗口不要关闭)。

持续集成 简介&环境搭建

注意:关机或重启后就要重新进入 ngrok 所在的目录执行 ngrok http 8080 命令生成新的 IP,同时 Jenkins 和 github 中的 webhook 对应的 ip 也要修改。

2.7 Gradle 安装

Gradle 简介

Gradle 是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于 Kotlin 语言的 kotlin-based DSL,抛弃了基于 XML 的各种繁琐配置。

Gradle 面向Java应用为主。当前其支持的语言C++、Java、Groovy、Kotlin、Scala和Swift,计划未来将支持更多的语言。

Gradle 和 Maven 两者都是项目工具,但是 Maven 现在已经是行业标准,Gradle 是后起之秀,很多人对它的了解都是从 Android Studio 中得到的。Gradle 的优点主要如下:
  • 其一:简洁。Gradle 抛弃了 Maven 的基于 XML 的繁琐配置,众所周知 XML 的阅读体验比较差,对于机器来说虽然容易识别,但毕竟是由人去维护的。取而代之的是 Gradle 采用了领域特定语言 Groovy 的配置,大大简化了构建代码的行数。
  • 其二:灵活。各种在 Maven 中难以下手的事情,在 Gradle 中就是小菜一碟,比如修改现有的构建生命周期,几行配置就完成了,同样的事情,在 Maven 中你必须编写一个插件,那对于一个刚入门的用户来说,没个一两天几乎是不可能完成的任务。

Gradle 安装

1) 登录官网下载解压版本

进入官网:https://gradle.org/

持续集成 简介&环境搭建

单击 Install Gradle 之后,下拉页面,单击如下链接,下载最新版本:

持续集成 简介&环境搭建

2)解压并配置环境变量:

将下载后的压缩文件解压到指定位置,并配置环境变量。如下:

持续集成 简介&环境搭建

3)验证安装成功:

启动命令行,输入:gradle

持续集成 简介&环境搭建