【云原生 • DevOps】 DevOps 入门、Maven 插件自动部署微服务
目录
一、认识 DevOps
DevOps 介绍
在认识 DevOps 之前,我们有必要先了解一下整个软件开发的生命周期,以及开发中会经历哪些过程。软件开发必须包含的两个团队是开发团队、运维团队;
- 开发团队将开发计划从头开始设计并完成整体系统的构建(系统迭代更新)
- 运维团队将开发团队的代码进行测试后部署上线(维持系统稳定运行)
由目标不同的两个团队协同完成一个软件的开发,一般来说他们是这样进行协同的:开发团队制定好计划并完成代码编写后提供给运维团队,然后运维团队向开发团队反馈需要修改的 BUG 以及需要返工的任务。在这个过程中,开发人员需要经常性的等待运维人员的反馈,这就导致事件的延长并推迟了软件开发周期。现在互联网模式推崇敏捷开发,项目的迭代速度更快,由于开发与运维人员的沟通问题就导致敏捷开发基本不可能实现。
为解决以上问题 DevOps 应运而生,它的全称为【Development&Operations-开发&运维】。正如 DevOps 的标志(无穷大 ∞)一样,它是一个不断提高效率且持续不断工作的过程。
DevOps 管理软件生命周期
DevOps 的核心在于简化 Dev 和 Ops 两个团队之间的工作流程,使软件的整体开发过程更加快捷。软件的整体开发流程包括:
- PLAN:开发团队根据用户的目标制定开发计划
- CODE:根据 PLAN 开始编码过程,将不同的代码存储在一个库中
- BUILD:编码完成后,将代码构建并且运行
- TEST:构建项目后,测试代码是否存在 BUG 或错误
- DEPLOY:代码经过手动测试和自动化测试后,认定代码已经准备好部署并交给运维团队
- OPERATE:运维团队将代码部署到生产环境中
- MONITOR:项目部署上线后持续监控产品
- INTEGRATE:将监控阶段收到的反馈发送回 PLAN 阶段,整体反复,持续集成、持续部署
最终可以总结出 DevOps 的定义:高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快、更频繁的交付更稳定的软件。
二、Maven 插件使用详解
微服务的部署有两种方法:手动部署,先基于源码打包成 jar 包或 war 包,然后将 jar 包或 war 包上传至虚拟机并拷贝至 JDK 容器。通过 Maven 插件自动部署,对于数量众多的微服务,手动部署就太过繁琐了,而且非常容易出错,所以 Maven 部署是实际开发中最经常使用的部署方法。
使用 Maven 插件自动部署微服务
第一步:修改宿主机的 Docker 配置,让它可以远程访问(Docker 远程操作默认是关闭的);
[root@192 ~]# vi /lib/systemd/system/docker.service
进入文件后,在 ExecStart= 后面添加以下配置;
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
第二步:刷新配置,重启服务,依次执行以下代码;
-
[root@192 ~]# systemctl daemon-reload
-
[root@192 ~]# systemctl restart docker
-
[root@192 ~]# docker start registry
-
registry
第三步:打开我们需要进行自动部署的项目,在 pom.xml 文件中增加以下配置;
-
<build>
-
<finalName>app</finalName>
-
<plugins>
-
<!--第一个插件:spring-boot的maven插件-->
-
<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.200.129: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.200.129:2375</dockerHost>
-
</configuration>
-
</plugin>
-
</plugins>
-
</build>
(以下我将以一个个人项目作为示例进行操作,我使用的软件是 idea;)
第四步:使用 Maven 命令调用插件,先打开命令行窗口;
输入 mvn install,此命令会将当前目录下工程以及所有子工程安装至本地仓库;
第五步:为某个工程创建 Docker 镜像(这里的示例项目只有一个工程,所以我直接在根目录进行操作,如果目录下有多个子工程,可先进入子工程:输入 cd 然后直接将目录拖到命令行窗口即可);
输入 mvn docker:build -DpushImage,此命令为创建并上传 docker 镜像;
在此处可能会出现无法连接服务的问题,报错如下;
检查 idea 的 Docker 配置是否连接了宿主机的 2375 端口,点击 “file” --> “setting” --> docker,查看 TCP socket;
如下为创建并上传成功;
此时查看宿主机镜像,可以看到我们刚刚创建的快照版镜像;
同时访问 192.168.200.129:5000/v2/_catalog 查看我们的私有仓库是否有此镜像;
通过 Docker-Maven 插件实现微服务部署演示完成。
文章来源: majinjian.blog.csdn.net,作者:Developer 小马,版权归原作者所有,如需转载,请联系作者。
原文链接:majinjian.blog.csdn.net/article/details/125603158
- 点赞
- 收藏
- 关注作者
评论(0)