Jenkins 是由 Java 编写的编排引擎,在 Full GC 时会 Stop The World(STW)。在大规模构建时,STW 可能会导致 Jenkins 无法处理新的请求。

配置较大的 -Xms -Xmx 参数

Jenkins 是由 Java 编写的编排引擎,在 Full GC 时会 Stop The World(STW)。在大规模构建时,STW 可能会导致 Jenkins 无法处理新的请求。

为了避免频繁的 STW,同时增大并发量,建议设置较大的堆,-Xms3g -Xmx6g -XX:MaxRAM=6g。具体数值可以根据监控值来设置,Java Full GC 之后,内存占用会陡降。

request 不要设置太小

request 设置太小,可能会导致 Jenkins 运行起来之后,节点资源不足,引发驱逐,甚至压垮节点。

request 应该接近真实值,如果有足够的机器资源,应该配置亲和性,让 Jenkins 尽可能运行在单独的机器上。request >= 1.25 * JVM 最大堆内存,limit >= 2 * JVM 最大堆内存。

IO 性能不能差

Jenkins 使用磁盘文件存储数据,每条流水线、每次构建都会占用一个文件目录,产生大量文件。通常流水线数量有限,但在构建历史达到 10000+ 级别时,会感受到 IO 对 Jenkins 的影响。

如果使用本地存储,推荐使用高性能的 SSD。如果是使用网络存储,需要高性能的网络支持,同时加大客户端的缓存池。

较大的 jenkins_home 的磁盘空间

磁盘满时,Jenkins 将不能工作,在 Jenkins 后台会有错误提示。

建议对 Jenkins 的工作目录进行磁盘使用率监控,并配置告警规则。如果没有监控告警系统,那么建议直接设置一个较大的磁盘空间给 /var/jenkins_home 目录。因为有一些 Storage Class 不支持动态扩容,当磁盘满时,就只能手动拷贝了。

使用 Kubernetes plugin 在 Kuberntes 上构建

基于物理机、虚拟机的构建,增加了运维成本、限制了并发的数量。

使用 Kubernetes plugin 插件在 Kubernetes 上进行构建能充分利用云原生易扩展、易维护的优势,进行大规模的构建。参考: 在 Kubernetes 上动态创建 Jenkins Slave,https://www.chenshaowen.com/blog/creating-jenkins-slave-dynamically-on-kubernetes.html) 。由于构建比较占用资源,为了避免对集群的影响,可以配置亲和性,将构建 Pod 集中到指定的节点执行。

使用 CasC 管理 Jenkins 的配置

通过 Jenkins 页面进行各种构建、安全等配置,不仅繁琐、不易维护,而且不能够复用。

使用 CasC 插件,允许用户将 Jenkins 的配置,通过文本的形式进行描述,还可以放置到 Git 仓库中进行版本管理。

jenkins: securityRealm: ldap: configurations: - groupMembershipStrategy: fromUserRecord: attributeName: "memberOf" inhibitInferRootDN: false rootDN: "dc=acme,dc=org" server: "ldaps://ldap.acme.org:1636" nodes: - permanent: name: "static-agent" remoteFS: "/home/jenkins" launcher: jnlp: workDirSettings: disabled: true failIfWorkDirIsMissing: false internalDir: "remoting" workDirPath: "/tmp" slaveAgentPort: 50000 agentProtocols: - "jnlp2" 

使用 Custom WAR Packager 打包 Jenkins

在部署一套新的 Jenkins 环境时,会需要安装大量插件,非常影响部署速度,同时插件是否能正常下载也存在不确定性。

Custom WAR Packager 允许用户将 Jenkins 、配置、插件打包成一个完整的 war 包或者镜像。这样无论是开发测试,还是线上部署,都可以很方便的部署,并且环境一致,而用户只需要写一个 yaml 文件。

bundle: groupId: com.dev artifactId: "jenkins" description: "Jenkins Custom With Package" vendor: "Jenkins Project"
buildSettings: docker: base: jenkins/jenkins:2.277.4 tag: shaowenchen/jenkins:2.277.4 build: true
war: groupId: org.jenkins-ci.main artifactId: jenkins-war source: version: 2.277.4
plugins: - groupId: io.jenkins artifactId: configuration-as-code source: version: "1.47"
libPatches: - groupId: "org.jenkins-ci.main" artifactId: "remoting" source: git: https://github.com/jenkinsci/remoting.git
systemProperties: { jenkins.model.Jenkins.slaveAgentPort: "50000", jenkins.model.Jenkins.slaveAgentPortEnforce: "true"}
groovyHooks: - type: "init" id: "initScripts" source:  dir: scripts
casc: - id: "jcasc-config" source: dir: jenkins.yml 

Jenkins Shared Libraries

在使用 Groovy 编写 Pipeline 的过程中,经常会有大量重复代码。

Jenkins 共享库提供函数级别的共享,可以在不同流水线之间复用同一套函数逻辑,对于平台建设、大规模使用场景适用。不仅能加快 Pipeline 编写,还方便维护、平滑升级。

@Library('utils') import org.foo.Utilities
def utils = new Utilities(this)
node { utils.mvn 'clean package'
} 

参考

  1. https://www.jenkins.io/zh/doc/book/pipeline/shared-libraries/
  1. https://github.com/jenkinsci/configuration-as-code-plugin
  1. https://github.com/jenkinsci/custom-war-packager
  1. https://zhuanlan.zhihu.com/p/370241822

Jenkins 在 Kubernetes 上的实践相关推荐

  1. git连接jenkins_基于 Jenkins 和 Kubernetes 的持续集成测试实践了解一下!

    作者 | 刘春明 责编 | Carol 出品 | CSDN 云计算(ID:CSDNcloud) 封图| CSDN下载于视觉中国 目前公司为了降低机器使用成本,对所有的AWS虚拟机进行了盘点,发现利用率 ...

  2. SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(工具部署)

    作者 | 孤弋  阿里云高级技术专家,负责 EDAS 的开发和用户体验优化工作. 导读:上一篇文章<SpringCloud 应用在 Kubernetes 上的最佳实践 - 部署篇(开发部署)&g ...

  3. 基于 Jenkins 和 Kubernetes 的持续集成测试实践了解一下!

    作者 | 刘春明,责编 | Carol 出品 | CSDN 云计算(ID:CSDNcloud) 封图 | CSDN下载于视觉中国 目前公司为了降低机器使用成本,对所有的AWS虚拟机进行了盘点,发现利用 ...

  4. 你公司的虚拟机还闲着?基于 Jenkins 和 Kubernetes 的持续集成测试实践了解一下!...

    作者 | 刘春明 责编 | Carol 出品 | CSDN 云计算(ID:CSDNcloud) 封图| CSDN下载于视觉中国 目前公司为了降低机器使用成本,对所有的AWS虚拟机进行了盘点,发现利用率 ...

  5. SpringCloud 应用在 Kubernetes 上的最佳实践 —— 高可用(容量评估)

    作者 | 牛兔 导读:本文是<SpringCloud 应用在 Kubernetes 上的最佳实践>系列文章的第 11 篇,从前面两期开始我们进入到了高可用专题,分别介绍了流量防护和故障演练 ...

  6. Spring Cloud 应用在 Kubernetes 上的最佳实践 — 高可用(混沌工程)

    作者 | 穹谷 导读:从上篇开始,我们进入到了高可用的章节,上篇提到的熔断能力,是历年保障大促当天晚上整个系统不被洪峰流量打垮的法宝.本文将重点介绍为什么我们要做混沌工程以及如何使用 ChaoBlad ...

  7. SpringCloud 应用在 Kubernetes 上的最佳实践 — 高可用(熔断)

    作者 | 宿何 导读:前几篇我们主要站在应用发布的场景,描述在发布过程中会遇到的灰度.监控.回滚.优雅上下线等保障发布能顺利进行的注意事项.作为一个程序员 GG,可灰度的发布顺利上线往往意味着准点下班 ...

  8. SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(优雅上下线)

    作者 | 骄龙 导读:本篇是<SpringCloud 应用在 Kubernetes 上的最佳实践>系列文章的第八篇,主要介绍了如何做到流量的无损上/下线.更多相关文章阅读可查看文末. 前言 ...

  9. SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可回滚)

    作者 | 长门 **导读:**本篇是<SpringCloud 应用在 Kubernetes 上的最佳实践>系列文章的第七篇,主要介绍了新功能上线时,如何尽快减少对线上用户的影响?发布系统需 ...

最新文章

  1. 表表达式,Substring, CharIndex, 多行数据变同一行的用法
  2. 百度蜘蛛动态网页ajax,百度SEO优化百度蜘蛛可读内容
  3. int *ptr=(int *)(a+1)问题的探讨
  4. CTFshow php特性 web147
  5. 紧致差分的matlab程序,对流占优扩散方程的一种新C—N 紧致差分格式
  6. python 时间序列分析之ARIMA(不使用第三方库)
  7. Date类(日期时间类)219
  8. 贾跃亭又成功拿到6亿融资!九城与法拉第未来签约...
  9. 【ElasticSearch】es 线程池 ThreadPool 的封装
  10. mysql数据库连接空闲超时设置不生效,未区分全局变量及interactive_timeout设置
  11. 机器智能芯片 10 大新秀!华为抢占一席,Google 占比最多!
  12. Redis(三)源source编译
  13. linux内核之中断和异常
  14. 计算机附件中小工具使用方法,计算机系统工具的使用方法
  15. 规则引擎drools教程一
  16. 系统U盘还原成普通U盘
  17. 武汉芯源CW32L083系列MCU在空气净化器的应用介绍
  18. spring cloud 全家桶 简单介绍
  19. 数组方法的增删等19种操作:unshift 、shift,push、pop、splice等等...!
  20. 算法与数据结构-常用算法

热门文章

  1. 只因接了一个电话,程序员被骗 30 万!
  2. 租约-分布式缓存一致性的高效容错机制
  3. 操作系统学习:系统调用与Linux0.12初始化详细流程
  4. 美多商城后台管理之登录、浏览器的同源策略
  5. python与Redis数据库进行交互(安装包、调用模块、StrictRedis对象⽅法、交互代码示例(string增加、string获取、string修改、string删除、获取键))
  6. VUE的本地应用-V- on
  7. 机器视觉工程师必须了解的基础知识
  8. 使用 YOLO 进行目标检测
  9. 解读基于多传感器融合的卡尔曼滤波算法
  10. 栈与队列4——用一个栈实现另一个栈的排序