


Kubernetes 自己是一个以服务扩容见长的容器编排系统,若是不能跟其它 CI/CD 工具结合起来,从根本上说仍是不能提高开发部署效率,达到持续集成,持续交付的目的,本文以 Jenkins 配合 Kubernetes 完成 Java 服务持续集成和部署过程碰到一些问题,进行说明和总结。javascript

是否须要把 Jenkins 集成 Kubernetes 集群中进行统一管理?java

Jenkins如何搭配 Kubernetes 实现持续集成?nginx


docker build -t docker.hub.com/dev/tomcat-webapps:$version .docker push docker.hub.om/dev/tomcat-webapps:$version
-
第一点,docker 构建镜像须要 tag ,这个 tag 能够经过 Jenkins 参数化构建,在构建以前输入版本号,若是没有输入,填写默认值便可。
第二点、历史镜像如何处理?比较建议每次镜像构建完成以后,经过 Jenkins 配置命令删除没有运行的镜像。git
具体根据使用场景处理这些中间产物。web
docker rm $(docker ps -a -q)
kubectl apply -f config.yamlsed -i 's/image-replace-webapps/tomcat-webapps:${version}/' tomcat_deployment.yaml;kubectl apply -f tomcat_deployment.yaml

「麻雀虽小五脏俱全」一个项目功能很少,可是少不了 configmap、deployment、甚至 service,Jenkins 在打包过程确定要涉及到对这些文件的修改,问题来了,这些文件如何存放呢?docker
若是你有强大的 helm 包管理工具,固然能够解决这些问题;若是你的项目没有大到使用 helm 进行文件管理,能够考虑把 yaml 配置直接放到源代码某个目录下面,利用 SVN/GIT 进行管理,也能够直接放到服务器某个路径下面,Jenkins 每次构建时 SSH 到这台服务器进行备份、修改运行 yaml 文件。tomcat

三、在构建过程当中须要注意问题服务器
docker 镜像构建过程当中经过参数化构建已经能够修改版本号,一样的,首先在 k8s 编排文件镜像部分添加可以已知占位符;微信
而后把这个版本号动态传递并替换到 k8s yaml 中;网络
sed -i 's/image-replace-webapps/tomcat-webapps:${version}/' tomcat_deployment.yaml;
在现实使用场景中,可能会存在多个Kubernetes环境,如何处理?
这时能够根据状况进行处理,好比线上环境和开发测试环境镜像仓库、集群环境、Jenkins都是严格隔离的,那就能够等到开发测试完成以后把上述流程从新走一遍。若是使用同一个 Jenkins 经过不一样的用户权限构建到不一样环境也是相似道理。其实看你怎么用,由于镜像已经集中存储到仓库,正式线上环境直接拿着 yaml 就能够跑起来,比之前上传 war 更清爽。

四、总结
本文主要以 Jenkins 为中心介绍了持续集成Kubernetes 过程,Jenkins自己是持续集成,持续交付工具链过程很是重要的一个部分,它是开源的而且提供了大量可用的插件,入门使用很是简单,可是真正掌握好 Jenkins 使用并非一件轻松的事情,如何使用 Jenkins 建立出高效稳定、灵活的流水线是全部从事 DevOps 开发人员所亟待解决的问题。
推荐
docker bridge 到 k8s pod 跨节点网络通讯机制演进
从Ice到Kubernetes容器技术,微服务架构经历了什么?
原创不易,随手关注或者”在看“,诚挚感谢!
本文分享自微信公众号 - 云原生技术爱好者社区(programmer_java)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。