
本文主要介绍持续集成的搭建方式,采用Docker的方式去搭建Jenkins环境,另外会涉及到SpringBoot和Git等技术。
传统的软件开发流程如下:
1、项目经理分配模块给开发人员
2、每个模块的开发人员并行开发,并进行单元测试
3、开发完毕,将代码集成部署到测试服务器,测试人员进行测试
4、测试人员发现bug,提交bug、开发人员修改bug
5、bug修改完毕再次集成、测试

但是这样就出现了如下问题:
1、模块之间依赖关系复杂,在集成时发现大量bug
2、测试人员等待测试时间过长
3、软件交付无法保障
那我们又该如何解决上述问题呢?可以采用持续集成来解决上述问题,那持续集成又是什么呢?大师Martin Fowler对 持续集成 是这样定义的:
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
持续集成的好处:
1、自动化集成部署,提高了集成效率。
2、更快的修复问题。
3、更快的进行交付。
4、提高了产品质量。
本文通过下图的模式进行持续集成的方案:
开发人员开发代码,推送到Git服务器中
当Git服务器中的代码发生变化时,会触发配置在Git服务器中的钩子地址,通知到Jenkins
Jenkins把代码下载下来,通过Maven,build成Docker镜像
再把Docker镜像推送到Docker仓库中
再从Docker仓库中构建出可以运行的Docker容器

接下来,我们介绍下如何构建上述环境。
本文中我们使用Centos7.x进行Docker的安装,所以我们需要在VmWare中先安装Centos7,这一步骤由读者自行安装。
(1)yum 包更新到最新

ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。
https://lug.ustc.edu.cn/wiki/mirrors/help/docker

systemctl命令是系统服务管理器指令
启动docker:

GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目安装。类似GitHub,能够浏览源代码,管理缺陷和注释,可以管理团队对仓库的访问。
官方支持的方式:
包含一切的RPM包: https://about.gitlab.com/downloads/
手动安装: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/installation.md
第三方docker镜像: https://github.com/sameersbn/docker-gitlab 镜像可以快速实现部署并使用,适合于熟悉Docker的人使用,入门很快。
如果我们直接使用Docker的镜像方式去安装GitLab,我们还必须手动安装一些相关软件,例如:Redis,PostgreSql。我们这次选用docker-compose的方式去安装gitlab。
docker-compose 是一个用来把 docker 自动化的东西。有了 docker-compose 你可以把所有繁复的 docker 操作全都一条命令,自动化的完成。
运行下边两条命令,即可安装docker-compose

Compose 是一个用户定义和运行多个容器的 Docker 应用程序。在 Compose 中你可以使用 YAML 文件来配置你的应用服务。然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务。
使用 Compose 基本会有如下三步流程:
在 Dockfile 中定义你的应用环境,使其可以在任何地方复制。
在 docker-compose.yml 中定义组成应用程序的服务,以便它们可以在隔离的环境中一起运行。
最后运行docker-compose up,Compose 将启动并运行整个应用程序。


初次访问,会弹出下列页面,我们需要为管理员root设置密码,例如12345678。

我们可以为gitlab添加普通用户,切换到register选项卡中,注册新用户。

登陆之后,我们就可以新建项目了,我们输入项目名,新建即可。


Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
接下来我们来编写一个最简单的SpringBoot入门项目。


由于我们是基础入门项目,所以我们只需要新建一个application.properties文件放在resources目录下(当然不放置也是可以的),内容为空即可。


我们运行引导类的main方法即可运行项目,此时控制台会输出如下日志,注意观察标红的部分,由于我们并没有进行任何的配置,项目自动运行在了端口号为8080的tomcat中,项目名也默认为“”。

我们在浏览器中输入"http://localhost:8080/quick",可以观察到下图的输出,这说明我们的项目已正常运行。

由于我们接下来会使用Jenkins把项目打包成Docker镜像,我们需要添加一个专门用于Docker的pom文件。内容为如下代码块:



在resources目录下创建Dockerfile文件,该文件用于构建docker镜像,文件名称必须是Dockerfile。

这一切都准备完毕之后,我们把项目push到上一节搭建好的GitLab中。
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

在浏览器中输入http://192.168.25.130:8889,可以观察到下面的页面,第一次启动需要耐心的等待,时间比较久,另外还需要解锁密码,密码在下图标红的位置。


进入Jenkins中,我们可以进行插件的安装,先选择下图第一个选项即可。



进入【系统管理】,点击【全局工具配置】,设置JDK、Git和Maven,我们可以选择自动安装。



根据下图我们设置下全局的凭据,注意此处要设置的是当前CentOS7的用户名和密码






脚本内容:







点击项目的左侧菜单中的【立即构建】,可以观察到下面的日志内容,日志太长,我分段给大家截取:
从gitlab中拉取源码

停止并删除之前运行的容器

通过Maven构建Docker镜像

创建并运行Docker容器

此时在浏览器中访问http://192.168.25.130:28080/quick,可以看到以下页面,这也正是我们最初在本机运行时看到的内容

到此为止,我们已经实现了运行Jenkins任务,自动执行GitLab的代码,但是我们还无法实现当GitLab中的代码发生变化时,Jenkins自动构建任务的功能。接下来,我们配置下WebHook,来实现该功能。


打开我们在Jenkins的任务进行设置,勾选Build Triggers,选择下面标红的复选框,并且复制其中的超链接。

打开GitLab中我们的项目,点击设置中的Integrations,在URL中填入我们刚刚在Jenkins中粘贴的超链接。

添加完webHook之后,我们点击test按钮,进行推送测试。

观察Jenkins中,会发现Jenkins已经自动执行了该任务。这说明我们的webhook也已经正确配置了。

经过我们多款软件的安装配置,我们逐步掌握了如何上传SpringBoot项目到GitLab中,并使用Jenkins自动构建任务,另外依托于Docker,让这一切变得更加方便,希望大家都多多思考,让机器自动干活,减少我们IT从业人员的重复、繁琐的工作量。