Jenkins 配合 Kubernetes 实现服务持续集成的实践和建议
Kubernetes 本身是一个以服务扩容见长的容器编排系统,如果不能跟其它 CI/CD 工具结合起来,从根本上说还是不能提升开发部署效率,达到持续集成,持续交付的目的,本文以 Jenkins 配合 Kubernetes 完成 Java 服务持续集成和部署过程碰到一些问题,进行说明和总结。
是否需要把 Jenkins 集成 Kubernetes 集群中进行统一管理?
Jenkins如何搭配 Kubernetes 实现持续集成?
docker build -t docker.hub.com/dev/tomcat-webapps:$version .
docker push docker.hub.om/dev/tomcat-webapps:$version
-
第一点,docker 构建镜像需要 tag ,这个 tag 可以通过 Jenkins 参数化构建,在构建之前输入版本号,如果没有输入,填写默认值即可。
第二点、历史镜像如何处理?比较建议每次镜像构建完成之后,通过 Jenkins 配置命令删除没有运行的镜像。
具体根据使用场景处理这些中间产物。
docker rm $(docker ps -a -q)
kubectl apply -f config.yaml
sed -i 's/image-replace-webapps/tomcat-webapps:${version}/' tomcat_deployment.yaml;
kubectl apply -f tomcat_deployment.yaml
「麻雀虽小五脏俱全」一个项目功能不多,但是少不了 configmap、deployment、甚至 service,Jenkins 在打包过程肯定要涉及到对这些文件的修改,问题来了,这些文件如何存放呢?
如果你有强大的 helm 包管理工具,当然可以解决这些问题;如果你的项目没有大到使用 helm 进行文件管理,可以考虑把 yaml 配置直接放到源代码某个目录下面,利用 SVN/GIT 进行管理,也可以直接放到服务器某个路径下面,Jenkins 每次构建时 SSH 到这台服务器进行备份、修改运行 yaml 文件。
3、在构建过程中需要注意问题
docker 镜像构建过程中通过参数化构建已经可以修改版本号,同样的,首先在 k8s 编排文件镜像部分添加能够已知占位符;
然后把这个版本号动态传递并替换到 k8s yaml 中;
sed -i 's/image-replace-webapps/tomcat-webapps:${version}/' tomcat_deployment.yaml;
在现实使用场景中,可能会存在多个Kubernetes环境,如何处理?
这时可以根据情况进行处理,比如线上环境和开发测试环境镜像仓库、集群环境、Jenkins都是严格隔离的,那就可以等到开发测试完成之后把上述流程重新走一遍。如果使用同一个 Jenkins 通过不同的用户权限构建到不同环境也是类似道理。其实看你怎么用,因为镜像已经集中存储到仓库,正式线上环境直接拿着 yaml 就可以跑起来,比以前上传 war 更清爽。
4、总结
本文主要以 Jenkins 为中心介绍了持续集成Kubernetes 过程,Jenkins本身是持续集成,持续交付工具链过程非常重要的一个部分,它是开源的并且提供了大量可用的插件,入门使用非常简单,但是真正掌握好 Jenkins 使用并不是一件轻松的事情,如何使用 Jenkins 创建出高效稳定、灵活的流水线是所有从事 DevOps 开发人员所亟待解决的问题。
推荐
docker bridge 到 k8s pod 跨节点网络通信机制演进
从Ice到Kubernetes容器技术,微服务架构经历了什么?
原创不易,随手关注或者”在看“,诚挚感谢!
本文分享自微信公众号 - 云原生技术爱好者社区(programmer_java)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
社工模拟——利用BadUSB穿透3层内网
作为一个安全人员,听过许多社工APT案例,钓鱼邮件、水坑攻击、丢个u盘等等。前段时间在一次培训中了解到BadUSB的攻击方式,可以通过U盘达到控制服务器的效果,在著名的美剧《黑客军团》中也出现了在停车场扔BadUSB来进行钓鱼的场景。 一时好奇,于是尝试模拟一次社工,利用VMware搭建了3层网络靶场,通过BadUSB+MSF的攻击手段,一步一步渗透到第三层网络。 0x01 三层网络靶场搭建 本次模拟实验的网络拓扑如下:第一层网络,模拟企业办公网,为一台win7的员工办公电脑,第二层网络模拟内网,是一台win2003服务器,第三层网络为企业核心网,为一台Linux服务器。攻击者的攻击机有kali和win10。 我们可以利用VMware搭建出3层网络的网络环境,首先在虚拟机中新建3块网卡,并选择仅主机模式: 我们将kali设为第一层网络vmnet1,在网络适配器中选择自定义vmnet1: 在第一层靶机win7虚拟机设置中添加一个网络,并将两个网络分别设为vmnet1和vmnet2,达到双网卡的效果: 同理,将第二层靶机win2003设为双网卡vmnet2和vmnet3: 最后,...
- 下一篇
写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实
好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上。 一般来说,我们学Java之前,第一步就是安装JDK环境。这个简单啊,我们一般直接把JDK从官网下载下来,安装完成,配个环境变量就可以愉快地使用了。 不过话说回来,对于这个天天使用的东西,我们难道不好奇这玩意儿它到底是怎么由源码编译出来的吗? 带着这个原始的疑问,今天准备大干一场,自己动动呆萌的小手,来编译一个属于自己的JDK吧! 对了,本文在开源项目:https://github.com/hansonwang99/JavaCollection中已收录,包含自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中... 还有个待填的坑 记得之前不是出过一期关于《JDK源码阅读环境搭建》相关的视频以及文章嘛,细心的小伙伴,可能会发现一个很实际的问题: 我们将src.zip包里的JDK源码解压出来,关联到这份源码之后,调试时是可以进,但是我们在加注释的时候却只能在行尾添加,并不能改变原代码的行结构。换句话说,如果在源码中加了跨行的多行注释...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8编译安装MySQL8.0.19
- SpringBoot2全家桶,快速入门学习开发网站教程
- Hadoop3单机部署,实现最简伪集群
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6