持续集成(CI)和容器管理学习笔记
2021/11/2 6:13:11
本文主要是介绍持续集成(CI)和容器管理学习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 1. DockerMaven插件
- 1.1 Maven插件自动部署步骤:
- 2. 持续集成与Jenkins
- 2.1 什么是持续集成
- 2.2 Jenkins简介
1. DockerMaven插件
微服务部署方式:
- 手动部署:基于源码打包生成jar,上传到服务器。
- 通过Maven插件自动部署。
1.1 Maven插件自动部署步骤:
- 修改宿主机docker配置,让其可以远程访问。在
docker.service
文件的ExecStart=
后添加-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
vi /lib/systemd/system/docker.service
- 刷新配置,重启服务
systemctl daemon-reload sudo systemctl restart docker docker start registry
- 在
pox.xml
文件中添加以下内容
<build> <finalName>dockerDemo</finalName> <plugins> <!-- springboot maven插件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- docker 插件 --> <plugin> <!-- 版本信息 --> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <!-- 配置信息 --> <configuration> <!-- docker 生成的镜像名称 --> <imageName>192.168.2.11:5000/${project.artifactId}:${project.version}</imageName> <!-- 基础镜像 == Dockerfile中的 FROM jdk1.8 --> <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.2.11:2375</dockerHost> </configuration> </plugin> </plugins> </build>
以上配置会自动生成 Dockerfile
文件
FROM jdk1.8 ADD dockerDemo.jar / ENTRIPOINT ["java","-jar","/dockerDemo.jar"]
- 在cmd下,进入项目工程,进行打包和上传镜像。
mvn clean package docker:build -DpushImage
示例:
[INFO] Building image 192.168.2.11:5000/springboot-demo:0.0.1-SNAPSHOT Step 1/3 : FROM jdk1.8 ---> 79f8c221d4f6 Step 2/3 : ADD /dockerDemo.jar // ---> d0a85948e94f Step 3/3 : ENTRYPOINT ["java","-jar","/dockerDemo.jar"] ---> Running in ded9a19061e8 Removing intermediate container ded9a19061e8 ---> 61d57ebbc410 ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null} Successfully built 61d57ebbc410 Successfully tagged 192.168.2.11:5000/springboot-demo:0.0.1-SNAPSHOT [INFO] Built 192.168.2.11:5000/springboot-demo:0.0.1-SNAPSHOT [INFO] Pushing 192.168.2.11:5000/springboot-demo:0.0.1-SNAPSHOT The push refers to repository [192.168.2.11:5000/springboot-demo] 9f8f970adb5a: Pushed 5739a69f0bb7: Mounted from jdk1.8 f967d613a659: Mounted from jdk1.8 174f56854903: Mounted from jdk1.8 0.0.1-SNAPSHOT: digest: sha256:39f341edef265ddfbfab7227c63ffa12e41862e5601198f7a530cbc29061ab79 size: 1161 null: null [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 37.979 s [INFO] Finished at: 2021-11-01T23:16:33+08:00 [INFO] --------------------------------------------------------
- 进入宿主机centos查看镜像:
docker images
- 启动容器:
docker run -di --name=dockerDemo -p 88:8080 192.168.2.11:5000/springboot-demo:0.0.1-SNAPSHOT
- 访问:http://192.168.2.11:88/hello
注:这里编写了一个SpringBoot的程序。
@RestController public class HiController { @RequestMapping("/hello") public String k8s(){ return "<h1>HELLO</h1> <h1>HUATHY</h1>"; } }
2. 持续集成与Jenkins
2.1 什么是持续集成
- 持续集成Continuous integration,简称CI
- 如何更好的协同工作,确保软件开发质量。敏捷开发,如何在不断变化的需求中保证质量。
- 持续集成是针对此类问题的一种开发实践。倡导团队经常集成。每次集成都通过自动化构建来验证,包括自动编译、发布、测试,从而尽快的发现集成的错误,使团队更快的开发内聚的软件。
- 持续集成的特点:
- 是一个自动化的周期性集成测试过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成,无需人工干预。
- 需要有专门的集成服务器来执行集成构建。
- 需要有代码托管工具支持,eg:GitHub、Gitee、GitLab、Gogs。
- 持续集成的作用:
- 保证团队开发人员代码提交的质量,减轻软件发布时的压力。
- 持续集成中任何一个环节都是自动完成,无需太多人工干预,有利于减少重复过程以节省时间、费用、工作量。
2.2 Jenkins简介
- 开源持续集成工具。
- 特点:
- 易安装:java -jar jenkins.war即可运行。无需数据库。
- 易配置:提供友好的GUI界面。
- 变更支持:Jenkins能从(SVN/CVS)中获得产生代码更新列表,并输出到编译输出信息中。
- 支持永久连接:用户是通过web来访问Jenkins的,web地址是永久的,可以在各种文档中使用地址。
- 集成E-Mail,RSS,IM:当完成一次集成时,可以通过这些工具实时告诉集成结果。
- Junit/TestNG测试报告:以图表等形式提供详细的测试报表功能。
- 支持分布式构建:Jenkins可以把集成构建等工作分发到多台计算机中完成。
- 文件指纹信息:Jenkins会保存哪次集成构建产生了哪些jars文件, 哪一次集成构建使用了哪个版本的jars文件等构建记录;
- 支持第三方插件:使得Jenkins变得越来越强大。
// TODO 未完待续
这篇关于持续集成(CI)和容器管理学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享