云中加速、构建具有扩展能力的DevOps平台

如果您是一名工程师,那么您很可能已经在使用 Jenkins — 或者至少听说过它。

Jenkins 是市场上最流行的开源持续集成和持续交付 (CI/CD) 工具。它受欢迎的原因是什么?CloudBees 等组织的坚实支持、出色的社区支持、拥有庞大开发人员基础的数千个插件,以及其设置和使用的绝对简单性。

这允许组织将 Jenkins 与流行的版本控制工具(如 Git、Subversion 和 Mercurial)连接起来;与 SonarQube 和 Fortify 等代码分析软件集成;运行 Maven 和 Gradle 构建;执行 JUnit 和 Selenium 测试;以及更多。

尽管它是一个强大的工具,Jenkins配置管理却毫不费力。您只需要一个 Java Web 服务器(例如 Tomcat)和免费提供的jenkins.war文件,就可以了。Jenkins 有多种使用方式,现在我将讨论一些典型的模式

独立的 Jenkins 服务器

在此设置中,有一个 Jenkins 服务器负责托管和构建所有作业,并使用出站 TCP 链接部署到远程服务器。这是最直接的配置,您无需担心任何其他变量。

主与代理配置

使用独立的 Jenkins 服务器有其缺点。虽然您不必担心多个服务器和节点,但问题是您的服务器可能会因同时运行多个作业而过载。有一些方法可以通过增加 executor (执行器)的数量来解决这个问题,但很快就会遇到性能限制。

为了克服这个问题,您可以将一些作业分配到不同的称为 Jenkins 代理的机器上。Jenkins 代理运行一个小程序,该程序与 Jenkins 主机通信以检查它是否可以运行任何作业。当 Jenkins 找到已安排的作业时,它会将构建传输到代理服务器。问题解决了?好吧,继续阅读。


可扩展的Jenkins

让我们更进一步。出于一个简单的原因,您不需要静态的服务器来运行您的 Jenkins 作业——CI 是高峰期。

您没有每周 7 天、每天 24 小时运行的构建,并且在服务器空闲的持续时间内,这其实是在浪费服务器资源

如果你运行一个容器编排,比如 Kubernetes,你可以让 Jenkins 做更聪明的事情。这个想法很简单。您拥有负责托管配置和将作业分配给多个代理的 Jenkins 主控节点。但是,您不需要预先配置和部署代理——它们可以在需要时即时创建

它在很多方面变得简单:


好处1:无需规划 Jenkins 服务器的容量

由于在 Kubernetes 集群上运行Jenkins,可以在您的集群中扩展,直到它具有可用的资源容量。由于多个应用程序共享一个 Kubernetes 集群,因此可以节省资源——因为当您的构建运行时,所有工作负载可能不会同时达到峰值。

当您像我们一样在云提供商(例如 Google Cloud Platform)中运行集群时,事情会变得更好。Google Kubernetes Engine (GKE) 不仅允许您水平扩展容器,还可以根据集群负载添加或删除集群的工作节点——这为您提供了近乎无限的扩展能力。

好处2:并行运行构建和负载均匀

您不再需要规划和限制执行者;相反,Jenkins 将动态根据需要启动一个代理实例并在其中运行您的构建。问题解决了!

Kubernetes 可以很好地管理负载,它将确保您的 Jenkins 代理在最佳可用服务器上启动,从而使您的构建更快、更高效。

好处3:自动修复是可能的

如果运行构建的代理被损坏,您不再需要担心 - Jenkins 将删除不健康的实例并启动一个新的实例。

这节省了大量的故障排除时间,因为代理现在是可有可无的资源。如果代理不起作用,Jenkins 会要求 Kubernetes 删除它并创建另一个代理。

使用Jenkins的故事

这家物流公司希望在组织内无缝启用 DevOps。那时他们决定将 Jenkins 迁移到云端,并将其迁移到 Kubernetes 集群。现在他们的构建速度提高了 10 倍。他们没有遇到性能瓶颈。

“Jenkins 允许我们以可扩展的方式和或多或少独立的方式运行构建。”

              -Gaurav Agarwal,解决方案架构师

 

组织机构

一家英国物流公司的开发项目

编程语言

Java、PHP

平台

Docker、Kubernetes、Linux

版本控制系统

Bitbucket Server

构建工具

Gradle、Maven、docker、Helm

背景

我们开始单独使用 Jenkins,并且它在六个月内运行良好。但是随着越来越多的团队使用该工具以及负载的增加,我们自然会遇到性能开销。

由于那时我们没有使用Kubernetes,我们唯一的选择是通过服务器添加主代理(master/agent)配置,或者通过添加更多 CPU 和内存来垂直扩展服务器。我们选择了后者,因为它对我们来说更快、更舒适。然而,我们意识到这不会持续很长时间,并开始寻找替代方案。最终,该公司的 CTO 决定继续实施云战略。那对我们有好处。

目标

我们的最终目标是在组织内无缝启用 DevOps。因此,我们决定将我们的 Jenkins 迁移到云端,并将其迁移到我们已经构建并将所有工具迁移到的 Kubernetes 集群。

解决方案

我们有两种选择:将 master 容器化并独立使用,或者使用 Kubernetes 构建可扩展的 Jenkins。我们提出了以下架构:Jenkins master 的一个副本作为控制节点运行。所有用户都登录到 master 来构建和管理他们的作业。使用 Jenkins Kubernetes 插件,然后当有人触发构建时,我们使用 Kubernetes 来启动额外的 Jenkins 代理容器。它在容器中运行作业,并在成功时删除容器。

Jenkins 允许我们以可扩展的方式和或独立的方式运行构建。这允许多个构建以近乎无限的扩展能力并行运行。由于 Kubernetes 基础架构和 Google Cloud 平台的总体弹性,它还帮助我们优化了成本。结果?

  • 构建速度快 10 倍

  • 降低成本,因为 Jenkins 使用相同的 Kubernetes 集群

  • 由于没有性能瓶颈,交付时间更快


关于我们

泽阳,DevOps领域实践者。专注于企业级DevOps运维开发技术实践分享,主要以新Linux运维技术、DevOps技术课程为主。丰富的一线实战经验,课程追求实用性获得多数学员认可。课程内容均来源于企业应用,在这里既学习技术又能获取热门技能,欢迎您的到来!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值