Jenkins连接Kubernetes动态创建JNLP
持续构建与发布是我们日常工作中必不可少的一个步骤,目前大多公司都采用 Jenkins 集群来搭建符合需求的 CI/CD 流程,然而传统的 Jenkins Slave 一主多从方式会存在一些痛点,比如:
- 主 Master 发生单点故障时,整个流程都不可用了
- 每个 Slave 的配置环境不一样,来完成不同语言的编译打包等操作,但是这些差异化的配置导致管理起来非常不方便,维护起来也是比较费劲
- 资源分配不均衡,有的 Slave 要运行的 job 出现排队等待,而有的 Slave 处于空闲状态
- 资源有浪费,每台 Slave 可能是物理机或者虚拟机,当 Slave 处于空闲状态时,也不会完全释放掉资源。
正因为上面的这些种种痛点,我们渴望一种更高效更可靠的方式来完成这个 CI/CD 流程,而 Docker 虚拟化容器技术能很好的解决这个痛点,又特别是在 Kubernetes 集群环境下面能够更好来解决上面的问题,下图是基于 Kubernetes 搭建 Jenkins 集群的简单示意图:
这篇文章就是为了向大家说明,如何配置 Jenkins 才能使流水线脚本能够在 K8s 集群中启动 Jenkins 节点。首先你要先安装Kubernetes plugin这个插件。
我的 master 节点是跑在vm而不是k8s中,当然这并不重要。
1 配置 Jenkins Master
1.1 安装Kubernetes插件
在插件管理页面,搜索Kubernetes,勾选并安装即可。
1.2 创建k8s服务证书
Kubernetes
服务证书key是用来与Kubernetes API server
建立连接的,生成方法是,从Kubernetes API server
的/root/.kube/config
文件中,获取/root/.kube/config
中certificate-authority-data
的内容,并转化成base64
编码的文件即可。
安装命令行解析yaml
工具yq
|
|
服务端证书:
|
|
ca.crt
的内容就是Kubernetes
服务证书key。
客户端证书:
|
|
key:
|
|
生成Client P12
认证文件:
|
|
这里必须输入密码,不然在后面添加jenkins
相关配置后验证会报错
1.3 创建凭据
为了保证 Jenkins 能够访问 K8s 集群的资源,首先你需要按照以下步骤创建一些凭据:
这样之后 Jenkins 就可以使用这个凭据去访问 K8s 的资源啦
2 在 Jenkins Master 中配置云
在系统管理的节点管理点击 Add a new cloud,添加k8s集群
配置k8s集群信息
2.1 配置一个 pod template
根据自己的需要配置
2.1.1 添加Pod Template
2.1.2 添加容器
容器环境变量,挂载卷按需配置
2.2 Jenkinsfile中定义pod template
在Jenkinsfile中使用
|
|
3 测试效果
创建一个pipeline工程
|
|
参考链接: