Jenkins使用痛点小析

Jenkins使用痛点小析,第1张

Jenkins 刚开始搭建的时候,我们惊叹,这也太方便了吧?功能还这么强,慢慢的,我们会发现对方的缺点了,嗯,恋爱的味道,不对,似乎扯远了,还是说回来 Jenkins 了。

我们很难想象 Jenkins ,这么庞大的一个应用,居然没有数据库。那配置在哪保存呢?运行日志了?构建数据了?等等这些都是需要保存的啊。

屏幕快照 2019-12-19 下午8.29.10.png 屏幕快照 2019-12-19 下午8.29.10.png

当jenkins job数量达到一定量级,访问量大时候,会非常卡顿,仿佛回到了零几年的时候,网页那么卡。

查原因我们会发现瓶颈在 I/O 。因为jenkins每次访问,都需要读取配置,都需要读写日志,这些都是以文件方式写入磁盘的,是 所有slave 节点 一台master 通信。

可是我们是没有办法做负载均衡的

当我们部署后端服务时候,肯定做 LB(负载均衡) , Jenkins master 因为只能单节点,啊,挂了master,所有slave都掉链子了。

配置 存储 master节点磁盘,嗯,还好,比较小

构建日志 存储在master节点磁盘,这个,百万行代码的编译日志几百M大小,每天N个业务构建M次,存储在master,哈哈,每天上班第一件事清磁盘?

构建产物 存储在master节点磁盘,这个,占磁盘,不安全

针对这种情况了,日志用 ELK ,产物放到到 对象存储

调度,一个好高深的话题,教材上学过 *** 作系统对进程的各种调度算法,什么 先入先出 最短耗时 最高优先级(PRI,NI) 等等,而类似的集群调度, k8s 可能是最常见的了,但是 Jenkins 对于任务调度这块,实际来讲,确实很弱, 虽然 调度 也是 Jenkins 的核心能力之一

k8s 里面有 node节点 概念, Jenkins 也有

k8s 里面有 pod 概念, Jenkins 没有,类似的, Jenkins 是限制 node 的最大并行个数

k8s 里面有调度器, 进行 Predicates Priorities 两个过程, Jenkins 算法很简单,默认就是调度到 最近一次成功节点 上。

这样会带来一个比较严重的问题,会导致 部分机器处于极度打满,部分机器确空转,资源利用率严重两级分化

针对这点,我们其实有两种小的补救。

一种是降低node节点并行数量,比如原来是最大限制是10,下降到2后,第三个任务,比如调度另一个节点了,缺点就是可能造成更多排队情况

一种就是利用插件了,比如插件 throttle-concurrents 会比较均匀分配 https://plugins.jenkins.io/throttle-concurrents

总体而言,调度这块,Jenkins确实有很长路走

微服务 相比 单体应用 似乎高大上了很多,我们把服务抽象出来,只专注于某一部分,然后各个部分串联起来。

Jenkins 里面,一次构建,我们可能会写一个长长的脚本,举例子来说,我们需要构建一个移动端产物apk/ipa, 我们需要

clone code -> 更新依赖库 -> 编译 -> 产物保存 -> 分发到商店

传统上,我们可以把这一串代码都写到 job 配置里面,但更好的做法,我们是把每一步抽象出来,每一步都是一个服务(一个job)

怎么串联起来呢? 没有流水线之前,是 Jenkins 上下游任务关联 , 哈哈,当任务量多了,我们发现,调用链很难捋清楚了,当然微服务里面有自己的解决办法 - 链路追踪,网关

流水线 ,可以帮我们把这些串联起来,我们最后需要管理的只是流水线

小思考,不足之处,欢迎交流

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

Jenkins功能包括

1、持续的软件版本发布/测试项目。

2、监控外部调用执行的工作。

扩展资料:

jenkins拥有的特性包括:

1、易于安装-只要把jenkins.war部署到servlet容器,不需要数据库支持。

2、易于配置-所有配置都是通过其提供的web界面实现。

3、集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知。

4、生成JUnit/TestNG测试报告。

5、分布式构建支持Jenkins能够让多台计算机一起构建/测试。

6、文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。

7、插件支持:支持扩展插件,你可以开发适合自己团队使用的工具。

参考资料来源:百度百科-Jenkins

好处如下:

1、降低风险。

进行多次集成,并做相关的测试,有利于检查问题,减少假定。

2、减少重复的过程。

产生重复的过程有两个方面,一个是进行编译,测试,打包,部署;另一个是如果有问题没有及时发现,就会导致后边的代码开发方向是错误的。jenkins不仅可以把构建大的环节从手动转化成自动,并且也可以实现通过增加集成的频率来避免方向性的错误。

3、任何时间都都可以生成部署的软件。

4、增强项目的可见性。

jenkins特点说明

开源免费。

跨平台,支持所有的平台。

master/slave支持分布式的build。

web形式的可视化的管理页面, *** 作便捷。

安装配置简单,不需数据库支持。

tips及时快速的帮助。

丰富的插件,可以通过插件实现多平台集成。

能够实现邮件通知构建结果。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9961718.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存