一、持续集成

1.1 什么是持续集成

持续集成 Continuous integration ,简称CI。随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷(Agile)在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。

1.2 持续集成的特点

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

1.3 持续集成的作用

  • 保证团队开发人员提交代码的质量,减轻了软件发布时的压力;
  • 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量

二、使用Jenkins实现持续集成

2.1 Jenkins简介

Jenkins,原名Hudson,2011年改为现在的名字,它 是一个开源的实现持续集成的软件工具。官方网站:http://jenkins-ci.org/。Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。

特点:

  • 易安装:仅仅一个 java -jar jenkins.war,从官网下载该文件后,直接运行,无需额外的安装,更无需安装数据库;
  • 易配置:提供友好的GUI配置界面;
  • 变更支持:Jenkins能从代码仓库(Subversion/CVS)中获取并产生代码更新列表并输出到编译输出信息中;
  • 支持永久链接:用户是通过web来访问Jenkins的,而这些web页面的链接地址都是永久链接地址,因此,你可以在各种文档中直接使用该链接;
  • 集成E-Mail/RSS/IM:当完成一次集成时,可通过这些工具实时告诉你集成结果(据我所知,构建一次集成需要花费一定时间,有了这个功能,你就可以在等待结果过程中,干别的事情);
  • JUnit/TestNG测试报告:也就是用以图表等形式提供详细的测试报表功能;
  • 支持分布式构建:Jenkins可以把集成构建等工作分发到多台计算机中完成;
  • 文件指纹信息:Jenkins会保存哪次集成构建产生了哪些jars文件,哪一次集成构建使用了哪个版本的jars文件等构建记录;
  • 支持第三方插件:使得 Jenkins 变得越来越强大

2.2 Jenkins安装

2.2.1 JDK安装

将jdk-8u191-linux-x64.rpm上传到虚拟机上,然后执行安装命令:

npm -ivh jdk-8u191-linux-x64.rpm

RPM方式安装JDK,其根目录为:/usr/java/jdk1.8.0_191-amd64

2.2.2 Jenkins安装与启动

上传jenkins-2.150.1-1.1.noarch.rpm到虚拟机,然后执行安装命令:

npm -ivh jenkins-2.150.1-1.1.noarch.rpm

配置Jenkins:vi /etc/sysconfig/jenkins

修改用户和端口:

JENKINS_USER="root"
JENKINS_PORT="8888"

启动服务

systemctl start jenkins

访问连接:http://192.168.19.122:8888

从/var/lib/jenkins/secrets/initialAdminPassword中获取初始密密码串

安装插件

创建用户

进入主界面

2.3Jenkins插件安装

2.3.1 安装Maven插件

在插件管理中安装Maven插件

2.3.2 安装git

默认自动安装了git,如果没有的话自己重新安装一个。

2.4 全局工具配置

2.4.1 安装Maven和本地仓库

将maven压缩包上虚拟机上,解压后放到/usr/local目录下。编辑setting.xml配置文件 vi /usr/local/maven/conf/settings.xml ,配置本地仓库目录,内容如下:

<localRepository>/usr/local/repository</localRepository>

将本地开发环境的仓库上传到这个目录下,打包的时候就不用重新下载了。

2.4.2 全局工具配置

JDK配置

Git配置

Maven配置

2.5 持续集成

2.5.1 创建任务

源码管理,选中Git

Build

2.5.2 执行任务

点击绿色箭头,开始执行任务

执行结果:

2.5.3 执行内容

将leyou-registry打包成docker镜像,然后上传到虚拟机上的docker私有镜像库:

在控制台可以通过命令查看:

然后通过该镜像运行容器:

最后访问注册中心:

以上就完成了微服务的部署。

 

pom.xml中需要增加以下构建依赖

<build>
        <finalName>app</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- docker的maven插件,官网 https://github.com/spotify/docker-maven-plugin -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
                    <imageName>192.168.19.122:5000/${project.artifactId}:${project.version}</imageName>
                    <baseImage>jdk1.8</baseImage>
                    <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                    <dockerHost>http://192.168.19.122:2375</dockerHost>
                </configuration>
            </plugin>
        </plugins>
    </build>

配置虚拟机上的docker,允许远程访问:

vi /lib/systemd/system/docker.service其中ExecStart=后添加配置 ‐H tcp://0.0.0.0:2375 ‐H unix:///var/run/docker.sock

修改后如下所示:

 

 

 

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐