美文网首页
Jenkins集群在公司内部的实践(一)

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

作者: 天草二十六_简村人 | 来源:发表于2021-07-09 21:15 被阅读0次

    一、背景

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

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

    • jenkins单节点的压力大
    • jenkins缺乏自动扩缩容,需要容器化部署
    • 需要支持多环境的发布场景,把开发环境和测试环境集成在一个jenkins集群
    • 管理Job不够灵活

    二、目标

    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 来创建⼏个重要的对象:

    • ⼀个是 namespace,这是 K8s 给 Jenkins 的⼀个独⽴的命名空间。
    • 第⼆个就是 PVC 对象,我们会在图中看到⼀组外挂的存储节点,创建 PVC 对 象。

    接下来就是要创建 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框架中依赖的基础组件,需要持久化和共享,提供构建的效率。

    • 发布系统(OA后台调用jenkins的接口管理job)
    • git源码(增量拉取代码,需要存放在PVC)
    • sonar(静态代码扫描)
    • nexus(maven仓库,需要存放在PVC)(settings.xml需要共享)
    • harbor(镜像仓库)
    • k8s
    • 报告(Allure和其他自测试平台的报告)

    2、jenkins master

    • Job的管理,依赖pipeline插件
    • 权限管理,包括Role-Based Authorization Strategy和LDAP
    • Manage Credentials,管理和第三方系统的密钥
    • SSH
    • FTP

    3、jenkins slave

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

    • git
    • maven/gradle
    • docker
    • k8s
    • sonar
    • allure

    四、总结
    本系列文章主要是描述我们在搭建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/

    相关文章

      网友评论

          本文标题:Jenkins集群在公司内部的实践(一)

          本文链接:https://www.haomeiwen.com/subject/lybfpltx.html