Jenkins集群在公司内部的实践(一)

2021-07-09  本文已影响0人  天草二十六_简村人

一、背景

jenkins作为一款实用且广泛实用的CI/CD工具,为大多数中小公司拿来即用。可当我们的业务和工程逐渐增多,它在构建和自动化任务方面的压力也越来越大。
jenkins主要是用来基于源码的打包,公司用到的语言包括java/php/android/h5等,同时各组能够看到的项目也应该隔离开来。
开发人员需要让它与git源码的提交、合并结合起来,必要地和sonarqube、unit test和allure报告等集成。重点是unit test还会和mysql/mongodb/redis/es等中间件依赖,需要做到各任务之间的隔离。
测试人员在构建并运行后,除了要做回归测试,期间也需要做自动化测试。(测试平台我们选用的是meterspere开源平台)

所以摆在我们面前的问题是:

二、目标

1、jenkins集群化,满足高可用的要求
2、通过Pipeline方式管理Job,通过pipeline模板做到自动化
3、每次新建项目时,审批通过后,一键自动创建jenkins/gitlab等工程。
4、能够支持开发的单元测试和测试的自动化测试
5、将整个公司各语言的项目构建归集在一起,做到友好的权限控制。

三、主要思路

1、Master-Slave架构

向nginx这么优秀的框架学习,master用来管理job和权限等,真正执行任务的交由slave节点。

master-slave.png

如上图,salve的横向扩展能力,足以支撑公司的所有语言的所有项目的构建。

2、K8S容器化

不仅做到master-slave,结合docker容器化,完美地做到了pod资源的动态伸缩,Job资源隔离,同时保证了Jenkins的高可用。

k8s.png

整个部署完 K8s 的集群以后,我们⾸先需要部署的就是 Jenkins 的 Master 节点。 Master 节点相关的配置是通过 K8s 来创建⼏个重要的对象:

接下来就是要创建 deployment 对象,如果你了解 K8s ⼀定会清楚,deployment 是⼀个⾮常重要的 K8s control 的对象,它直接控制着 Pod 资源的镜像、Pod 的资源使⽤,还有它的服务探针等相关内容,这个都是在 deployment ⾥⾯进⾏创建的。

最后是创建 service 对象,service 对象创建以后,Pod 就可以正式的对集群内部提供服务。 以上,就是在 Master Jenkins 节点在 K8s ⾥⾯创建的过程。

具体的创建步骤,建议参考csdn文章:https://blog.csdn.net/aixiaoyang168/article/details/79767649

3、pipeline

管理job灵活,结合Blue Ocean UI让流水线的展示更加流畅。


pipeline.png

三、主要架构

架构设计.png

1、基础层

在CICD框架中依赖的基础组件,需要持久化和共享,提供构建的效率。

2、jenkins master

3、jenkins slave

工作节点,包括拉取代码、构建jar包、sonar静态代码扫码、单元测试、ftp上传构建物以及ssh远程执行命令等等,它承担了原先单个jenkins节点的所有工作。

四、总结
本系列文章主要是描述我们在搭建Jenkins集群的过程中遇到的坑,在此过程中,除了查阅jenkins和k8s官方的一些文档外,也得益于不少博客的帮助,让我们快速定位出问题。因此我们也希望经过本系列的文章,能让后来实践者少走点弯路。

五、后续的计划

此次的部署算是为DevOps打基础,暂时没用到harbor镜像,还是通过ftp传递jar包。而我们应用的部署,也还不是Docker/k8s这样的容器。我们的容器化,是为了jenkins高可用以及单元测试等分散负载。

DevOps.png

六、参考资料:
https://github.com/jenkinsci/ssh-steps-plugin
https://www.jianshu.com/p/aaa16f1566d7
https://www.jenkins.io/zh/doc/pipeline/steps/

上一篇下一篇

猜你喜欢

热点阅读