在 Kubernetes 上使用 Jenkins

本文首发于:Jenkins 中文社区git

原文连接    做者:Juan Ignacio Girogithub

译者:幸福街10号服务器

在 Kubernetes 上使用 Jenkins

Jenkins 是一个功能强大的自动化和 CI/CD 工具,能够成为 Kubernetes 流水线的重要组成部分markdown

sea

​有几种方法能够在 DevOps 环境中管理您的云基础架构。 DevOps 是一种鼓励快速流动的应用程序开发以及促进 IT 团队开发、测试、发布过程无缝无缝衔接的方法。架构

Jenkins 经过自动化将持续集成(CI)和持续交付(CD)无缝集成到开发流程中来优化工做流程。微服务

可使用 Kubernetes 中的 Jenkins pod 部署这些技术, Jenkins pod 能够根据团队的具体需求进行扩展。工具

CI/CD 流水线

Jenkins 是 CI/CD 的同义词,它是自动化开发、部署应用程序和微服务的完美工具,目前是市场上最流行的自动化工具。 Jenkins 拥有1000多个插件,能够轻松地与其余系统(包括 Kubernetes )集成。插件不只提供多系统集成,并且显著加强了 Jenkins 的能力,使 Jenkins 可以帮助您构建和部署几乎任何类型的项目。咱们在另外一篇文章中介绍了生活中最须要的20个 Jenkins 插件。oop

​因为 Jenkins 和 Kubernetes 的原生兼容性,设置本身的 CI/CD 流水线很是容易。与基于 VM 的部署相比,在 Kubernetes 上部署 Jenkins 优点更明显。例如,得到按需拥有特定于 Jenkins slaves (代理)项目的能力,而不是让一个 vm 池空闲等待任务。它将使用 master-agent 体系结构来彻底自动化微服务的建立和部署以及测试和部署所需的环境。测试

​可使用 Helmkubectl 或 GUIs 部署 Jenkins ,以便将新的 pods 部署到集群中。安装后,下一步是为 K8s 配置 Jenkins 插件。咱们须要配置系统设置,例如,代理在哪里找到 Jenkins master ,代理将使用的 Docker 镜像等。固然,将 Jenkins 配置为与 CI/CD 工做流一块儿工做也是相当重要的,包括设置测试和部署参数以及要如何设置 Jenkins 控制的集群。一旦 Jenkins 启动并运行,就能够实现一个彻底自动化的连续交付环境。优化

在 Jenkins 中设置一个流水线

​让 Jenkins 启动只是一个开始,下一步是在 Jenkins 内配置 CI/CD 流水线。 你能够先运行 minikube service Jenkins,而后使用其 Web UI 访问 Jenkins。

​而后,您能够选择安装必要的插件。 根据您要建立的流水线,您可能须要下载并安装合适的插件,以实现流水线自动化以及更好的管理。必须使用 Kubernetes 插件

​另外一个值得讨论的插件是 Kubernetes Continuous Deploy 插件,它专门为处理流水线的持续交付设计的。 该插件将处理为测试建立新的 pods 以及测试和部署之间的转换。

​配置完全部插件后,从新启动 Jenkins。 Jenkins 提供的一个很好的功能可以自动执行这些手动更改,所以下次您配置 CI/CD 系统(例如,在基础结构迁移的状况下)时,没必要再次经过手动更改。 您只需接收一个具备与之前相同配置和插件的实例。嵌入到 Jenkins Docker 镜像和 Jenkins 配置文件 config.xml 中的脚本 install_plugins.sh 实现了这一功能。

​如今,您能够继续建立您的第一个流水线,为它分配凭据,并开始在流水线内部进行开发。记住, Jenkins 并不老是从本地存储中提取代码;您须要在第一次配置时手动发出推送请求。

​建立第一个流水线,而后您能够经过优化 minikube 当即运行新应用程序。在大多数 CI/CD 工做流中,手动推送请求实际上很方便,由于如今您能够经过流水线更好地控制想要推送的代码。

在不一样的状况下推进变化

​当您打开应用程序代码并对其进行更改时, Jenkins 不会当即更新部署包。相反,您必须提交更改并等待 Jenkins 提取这些更改(取决于代码签出的配置方式),而后才能执行其余操做。

​在 Jenkins 用户界面上,有一个 Build now 命令用于运行新的构建。构建完成后,下次使用 Minikube 运行应用程序时,您将看到所作的更改。 Jenkins 流水线的配置方式使该工具很是有用。

​例如,您可使用 Jenkins 来支持多团队开发。 Jenkins 流水线做为代码运行,这意味着具备正确凭据的任何用户均可以提交更改并执行流水线中内置的流程。

​它也很是通用。 若是服务器忽然崩溃,流水线及其中的进程将自动恢复。 Jenkins 永远不会失去对它管理的集群的控制权,所以您可使用 Jenkins彻底消除对 CI / CD 环境的手动配置的须要。

​我我的最喜欢的是 Jenkins 管理多个流水线的方式,管理员能够清楚地查看系统中的全部流水线。再加上暂停和恢复流水线的能力,管理微服务和大型项目的开发使用 Jenkins 很是有帮助。

​另外的伟大的插件是流水线多分支流水线,它帮助咱们可视化 CI/CD 流。它容许在 repo 中定义一个 jenkins 文件,包括咱们但愿 jenkins 执行的全部步骤。不须要从 GUI 进行手动配置(可能只保留给管理员),而且容许开发人员灵活地控制给定项目/分支的流程。因为它在 Github 中,所以它也能够与任何其余应用程序库一块儿进行版本控制。

Jenkins 和 Kubernetes

​让咱们回到咱们的主要观点:在 Kubernetes 上使用 Jenkins 。从 Jenkins 工具的工做方式来看,很容易看出这种自动化度量如何完美地补充了 Kubernetes 。一旦配置了插件,每次触发新的构建/任务, Jenkins 都会在 K8s 中建立一个 Pod (经过设计用于执行该工做的按需代理)。一旦完成, Pod 将被销毁,从而避免了有固定的代理池等待任务执行的须要。如您所见, Kubernetes 为每一个开发团队提供了强大的 CI/CD 基础架构,而 Jenkins 则大大简化了对该环境的管理。

​这种组合可以在不一样的状况下改进 CI/CD 工做流,包括在更大的开发项目中。若是你考虑到大量 Jenkins 插件的可用性,包括 Kubernetes 流水线凭据以及目前已经可用的更多插件,您就会知道您有一个强大的 CI/CD 工具可使用。甚至有能力将流水线中的非安装工做和材料工做分开;没道理不爱它?

这篇文章最初发表在这里