Jenkins X 是一个开源系统,为软件开发人员在 Kubernetes 中提供持续集成、自动化测试和持续交付,统称为 CI/CD。Jenkins X 管理的项目获得完整的 CI/CD 流程,其中包含一个 Jenkins 管道,用于构建和打包项目代码以部署到 Kubernetes,并可以访问用于将项目提升到暂存和生产环境的管道。
开发人员已经受益于在 Kubernetes 上运行“经典”开源 Jenkins 和 CloudBee 版本的 Jenkins,这部分归功于 Jenkins Kubernetes 插件,该插件允许您动态启动 Kubernetes Pod 以运行 Jenkins 构建代理。Jenkins X 增加了 Jenkins 缺少的功能:对持续交付和管理项目晋升到 Kubernetes 中运行的预览、暂存和生产环境的全面支持。
本文是对 Jenkins X 工作原理的高级解释;它假设您对 Kubernetes 和经典 Jenkins 有一些了解。
您通过 Jenkins X 获得什么
如果您在主要的云提供商之一(Amazon Elastic Container Service for Kubernetes、Google Kubernetes Engine 或 Microsoft Azure Kubernetes Service)上运行,则安装和部署 Jenkins X 非常容易。下载 Jenkins X 命令行界面并运行 jx create cluster 命令。系统将提示您输入必要的信息,如果您采用默认设置,Jenkins X 将创建一个入门级 Kubernetes 集群并安装 Jenkins X。
当您部署 Jenkins X 时,许多服务将被启动以监视您的 Git 存储库,并通过构建、测试和将您的应用程序提升到暂存、生产和您定义的其他环境来做出响应。Jenkins X 还部署了一组支持服务,包括 Jenkins、Docker Registry、Chart Museum 和 Monocular 以管理 Helm charts,以及 Nexus,它充当 Maven 和 npm 仓库。
Jenkins X 部署还创建了两个 Git 存储库,一个用于您的暂存环境,一个用于生产环境。这些存储库是您用于管理项目源代码的 Git 存储库的补充。Jenkins X 使用这些存储库来管理部署到每个环境的内容,并且通过 Git pull 请求 (PR) 完成提升——这种方法称为 GitOps。每个存储库都包含一个 Helm chart,用于指定要部署到相应环境的应用程序。每个存储库还具有一个 Jenkins 管道来处理升级。
使用 Jenkins X 创建新项目
要使用 Jenkins X 创建新项目,请使用 jx create quickstart 命令。如果您未指定任何选项,jx 将提示您选择项目名称和平台 - 几乎可以是任何平台。支持 SpringBoot、Go、Python、Node、ASP.NET、Rust、Angular 和 React,并且列表还在不断增长。一旦您选择了项目名称和平台,Jenkins X 将
- 创建一个新项目,其中包含一个“hello-world”风格的 Web 项目
- 为所选平台添加适当类型的 makefile 或构建脚本
- 添加 Jenkinsfile 以管理到暂存和生产环境的提升
- 添加 Dockerfile 和 Helm charts,通过 Draft 创建
- 添加 Skaffold 配置,用于将应用程序部署到 Kubernetes
- 创建一个 Git 存储库并将新项目代码推送到那里
接下来,来自 Git 的 webhook 将通知 Jenkins X 项目已更改,它将运行您的项目的 Jenkins 管道以构建和推送您的 Docker 镜像和 Helm charts。
最后,管道将向暂存环境的 Git 存储库提交一个 PR,其中包含提升应用程序所需的更改。
一旦 PR 被合并,暂存管道将运行以应用这些更改并进行提升。在创建项目几分钟后,您将拥有端到端 CI/CD,并且您的项目将在暂存环境中运行并可供使用。

开发人员提交更改,项目部署到暂存环境。
上图说明了存储库、注册表和管道,以及它们如何在 Jenkins X 升级到暂存环境时进行交互。以下是步骤
- 开发人员提交并将更改推送到项目的 Git 存储库
- Jenkins X 收到通知并在一个 Docker 镜像中运行项目的 Jenkins 管道,该镜像包含项目的语言和支持框架
- 项目管道构建、测试并将项目的 Helm chart 推送到 Chart Museum,将其 Docker 镜像推送到注册表
- 项目管道创建一个 PR,其中包含将项目添加到暂存环境所需的更改
- Jenkins X 自动将 PR 合并到 Master
- Jenkins X 收到通知并运行暂存管道
- 暂存管道运行 Helm,Helm 部署环境,从 Chart Museum 拉取 Helm charts,并从 Docker 注册表拉取 Docker 镜像。Kubernetes 创建项目的资源,通常是 pod、service 和 ingress。
将现有项目导入 Jenkins X
当您通过 jx import 导入项目时,Jenkins X 会添加将项目部署到 Kubernetes 并参与 CI/CD 所需的内容。它将添加 Jenkins 管道、Helm charts 和 Skaffold 配置,用于将应用程序部署到 Kubernetes。Jenkins X 将创建一个 Git 存储库并将更改推送到那里。接下来,来自 Git 的 webhook 将通知 Jenkins X 项目已更改,并且将按照上述新项目所述的方式进行到暂存环境的升级。
将您的项目提升到生产环境
要将项目版本提升到生产环境,请使用 jx promote 命令。此命令将准备一个 Git PR,其中包含部署到生产环境所需的 Helm chart 更改,并将此请求提交到生产环境的 Git 存储库。一旦请求获得手动批准,Jenkins X 将运行生产管道以通过 Helm 部署您的项目。

开发人员将项目提升到生产环境。
下图说明了存储库、注册表和管道,以及它们如何在 Jenkins X 升级到生产环境时进行交互。以下是步骤
- 开发人员运行 jx promote 命令以将项目提升到生产环境
- Jenkins X 创建一个 PR,其中包含将项目添加到生产环境所需的更改
- 开发人员手动批准 PR,并将其合并到 Master
- Jenkins X 收到通知并运行生产管道
- 生产管道运行 Helm,Helm 部署环境,从 Chart Museum 拉取 Helm charts,并从 Docker 注册表拉取 Docker 镜像。Kubernetes 创建项目的资源,通常是 pod、service 和 ingress。
Jenkins X 的其他功能
Jenkins X 的其他有趣和吸引人的功能包括
预览环境
当您创建一个 PR 以向您的项目添加新功能时,您可以要求 Jenkins X 创建一个预览环境,以便您可以在 PR 合并之前使您的新功能可用于预览和测试。
扩展
可以创建 Jenkins X 的扩展。扩展是在 CI/CD 流程中的特定时间运行的代码。扩展可以提供在安装、卸载扩展时以及每个管道之前和之后运行的代码。
无服务器 Jenkins
您可以仅在需要时运行 Jenkins,而不是运行持续消耗 CPU 和内存资源的 Jenkins Web 应用程序。在过去的一年中,Jenkins 社区创建了一个 Jenkins 版本,可以通过命令行运行经典 Jenkins 管道,其配置由代码而不是 HTML 表单定义。
此功能现在在 Jenkins X 中可用。当您创建 Jenkins X 集群时,您可以选择使用无服务器 Jenkins。如果您这样做,Jenkins X 将部署 Prow 来处理来自 GitHub 的 webhook,并部署 Knative 来运行 Jenkins 管道。
Jenkins X 限制
Jenkins X 也有一些应考虑的限制
- Jenkins X 目前仅限于使用 Git 的项目: Jenkins X 对 CI/CD 有自己的看法,并假设每个人都想运行软件并将其部署到 Kubernetes,并且每个人都乐于使用 Git 进行源代码和定义环境。此外,无服务器 Jenkins 功能目前仅适用于 GitHub。
- Jenkins X 仅限于 Kubernetes: 诚然,Jenkins X 可以为任何类型的软件运行自动化构建、测试和持续集成,但持续交付部分的目标是 Jenkins X 管理的 Kubernetes 命名空间。
- Jenkins X 需要集群管理员级别的 Kubernetes 访问权限: Jenkins X 需要集群管理员访问权限,以便它可以定义和管理 Kubernetes 自定义资源定义。希望这只是一个暂时的限制,因为它可能是某些人的阻碍。
结论
Jenkins X 看起来是为 Kubernetes 实施 CI/CD 的一个好方法,我期待着在生产环境中对其进行测试。使用 Jenkins X 也是了解一些用于部署到 Kubernetes 的有用开源工具的好方法,包括 Helm、Draft、Skaffold、Prow 等。即使您认为 Jenkins X 不适合您,您也可能想要使用这些工具。如果您要部署到 Kubernetes,请试用 Jenkins X。
1 条评论