内容简介:技术干货,可收藏,点“在看”后,再看。使用Kubernetes插件时,我们需要做三件事情:
技术干货,可收藏,点“在看”后,再看。
如何使用
使用Kubernetes插件时,我们需要做三件事情:
-
根据官方文档,在Jenkins上加入kubernetes配置。
-
在Jenkinsfile中加入kubernetes agent的申明。
-
指定容器执行你的业务脚本。
关于第2点,kubernetes agent的申明又有两种方式。一种是脚本式的,代码样例如下:
一种是申明式,代码样例如下:
笔者推荐使用申明式。yaml配置部分看起来并不优雅,这是另一个话题。咱们今后再讲。
原理
我们都知道Jenkins是master/agent的架构。而master与agent之间通信方法有两种:
-
通过JNLP协议:需要启动JNLP客户端主动连接master。这是Kubernetes插件使用的方式。
-
通过SSH协议:master使用SSH主动连接agent机器。
Kubernetes插件的具体的做法就是连接到Kubernetes集群,然后启动一个Pod。Pod中包含一个JNLP客户端,容器名约定为:jnlp。jnlp 会主动连接Jenkins master。
所以,当你发现Jenkins任务的日志中,一直在等待jnlp连接时,我们可以这样查问题:
-
查看相应的Pod是否存活。
-
jnlp 容器连接不上master:大概率是配置不对。
可是,我们看到上面的示例代码中,都没有叫jnlp的容器呢。这是因为Jenkins kubernates插件在真正创建pod前,为我们混入了默认的jnlp的容器定义。也就是,最终执行的yaml其实是:
最后,pod启动后,pod中的jnlp容器会连上Jenkins master。当pipeline运行到以下代码:
kubernates插件会找到名为 maven 的容器,然后将闭包内的代码发给它执行。
以上基本就是kubernates插件全部。
更换jnlp实现
当我们知道它的原理后,我们也就可以更换jnlp的实现镜像了。比如有些同学是在arm架构的机器上执行Kubernetes的,那么,他可以创建一个基于arm架构的jnlp镜像,然后,加入到yaml中。比如:
小结
总的来说,它的原理无非就是创建pod,pod中的jnlp容器连接到Jenkins master,然后Jenkins master根据需要,将需要执行的命令发送给相应的容器执行。
附录
-
Jenkins kubernetes源码:https://github.com/jenkinsci/kubernetes-plugin
-
混入jnlp容器的代码位置:
org.csanchez.jenkins.plugins.kubernetes.PodTemplateBuilder#build() -
创建pod的代码位置:
org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher#launch
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Kubernetes 网络插件工作原理剖析
- Android插件化原理解析——剧终
- 深入浅出Service插件化原理
- 知识总结 插件化学习 Binder机制原理
- Mybatis插件扩展以及与Spring整合原理
- Vue 进阶系列(二)之插件原理及实现
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Designing for Emotion
Aarron Walter / Happy Cog / 2011-10-18 / USD 18.00
Make your users fall in love with your site via the precepts packed into this brief, charming book by MailChimp user experience design lead Aarron Walter. From classic psychology to case studies, high......一起来看看 《Designing for Emotion》 这本书的介绍吧!