在这篇文章中,我们使用Java和Spring Boot框架开发了一个微服务,然后使用DevOps管道将它与Jenkins和Docker一起部署。
序言
在本文中,将使用 Java 和 Spring 框架创建一个简单的微服务,并使用Jenkins和Docker创建一个DevOps管道。
注意:假设读者具有 Java 和 Web 技术的背景。本文不再单独介绍Spring,Jenkins,Java,Git和Docker的。
将按顺序介绍以下几点:
- 构建中的微服务
- 所需要的软件
- 使用 Jenkins 和 Docker 构建DevOps管道
微服务
可以使用以下URL从Github克隆微服务应用程序:
https://github.com/Microservices-DevOps/person.git
资源层
实体为Person,包含名称,电子邮件和id。开发一个管理Person实体的微服务。
package com.myapp.sample.model; |
使用常规CRUD操作测试实体层。然后,我们检查实体是否被持久化,查询和更新
package com.myapp.sample.model; |
持久层
持久层由Spring Boot自动管理。 PagingAndSortingRepository接口是CrudRepository的扩展,用于提供使用分页和排序抽象检索实体的附加方法。由于使用这些接口自然会使测试覆盖率达到100%,故无需写其他测试方法。
package com.myapp.sample.repositories; |
业务层
PersonService接口包含三个操作:保存,按ID查找,以及查找Repository层支持的多个CRUD操作的所有实例。
package com.myapp.sample.service; |
PersonService接口通过调用持久层实现的并未添加任何业务服务实现。由于Spring Boot的持久层测试范围已全部覆盖,因此无需单独测试业务业务。
package com.myapp.sample.service; |
REST API 层
通过将调用业务层来间接调用持久层来暴露REST API。
package com.myapp.sample.controller; |
使用Spring Boot自带测试框架测试 REST API 层
package com.myapp.sample.controller; |
以上这些基本上是用于开发微服务的Java代码。
所需软件
现在看下管理微服务所需的软件。
Java
在本文的例子中,使用Java8。由于Jenkins需要Java8,所以建议使用Java8。
Git
安装最新版本的Git。
Docker
安装最新版本的Docker。由于我有一台Windows8机器,所以我使用的是Docker Toolbox for Windows。
MySQL
使用以下命令安装MySQL 5.7 Docker镜像:
docker pull mysql |
在Docker中使用ip命令获取Docker实例的ip并替换demo程序中resources\application.properties的ip。
Jenkins
使用以下命令安装Jenkins Blue Ocean版本:
docker pull jenkinsci/blueocean |
DevOps 流水线
现在我们来看看用于构建,部署和管理Git存储库的DevOps管道。在我们理解管道之前,在Git Flow上花几分钟是很重要的。
Git Flow
Git Flow是Git的分支模型。它主要由主分支(与生产代码并行),开发分支(开发的主要分支),发布分支(用于开发)和功能分支(供开发人员使用)组成。在开发人员完成代码之后,会为团队负责人创建一个pull请求,以检查并将代码合并到开发中。创建发布分支后,错误修复将进入此分支,并在代码稳定后再次合并以开发和管理。在此模型中,标签是从主分支创建的,用于发布到生产。
可以在此处查看可视化描述:https://datasift.github.io/gitflow/IntroducingGitFlow.html
JenkinsFile
有必要在Jenkins中创建一个多分支管道。这允许Jenkins自动处理Git Flow。当提供到Git存储库的链接时,Jenkins会自动选择JenkinsFile。将阶段配置为在签入时触发构建时可视化地查看管道。在此示例中,我们使用PMD,CheckStyle和FindBugs检查代码。欢迎您尝试更成熟的工具,如Sonar,代替PMD,CheckStyle和FindBugs。在管道设置中,我们在一个步骤中构建镜像,并在另一个步骤中运行镜像,以便在主分支中发生更改时更新测试环境容器。打tag时,将使用镜像tag名称更新生产环境,如1.0.0。欢迎您尝试将此示例设置为用于生产的不同Jenkins文件和用于生产的Docker文件,这在生成镜像后是必需的。
#!/usr/bin/env groovy |
具体描述参见:https://jenkins.io/doc/tutorials/build-a-multibranch-pipeline-project/
结语
使用Kubernetes进行部署可以改进此示例。但可以使用Docker创建一个完整的管道,但这不是本文的目标。欢迎大家提出更多好方案。

