Jenkins X 入门

Jenkins X 为 Kubernetes 提供持续集成、自动化测试和持续交付。
354 位读者喜欢这篇文章。
How Kubernetes became the solution for migrating legacy applications

Opensource.com

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 还部署了一组支持服务,包括 JenkinsDocker RegistryChart MuseumMonocular 以管理 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,并且您的项目将在暂存环境中运行并可供使用。

Developer commits changes, project deployed to staging

开发人员提交更改,项目部署到暂存环境。

上图说明了存储库、注册表和管道,以及它们如何在 Jenkins X 升级到暂存环境时进行交互。以下是步骤

  1. 开发人员提交并将更改推送到项目的 Git 存储库
  2. Jenkins X 收到通知并在一个 Docker 镜像中运行项目的 Jenkins 管道,该镜像包含项目的语言和支持框架
  3. 项目管道构建、测试并将项目的 Helm chart 推送到 Chart Museum,将其 Docker 镜像推送到注册表
  4. 项目管道创建一个 PR,其中包含将项目添加到暂存环境所需的更改
  5. Jenkins X 自动将 PR 合并到 Master
  6. Jenkins X 收到通知并运行暂存管道
  7. 暂存管道运行 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 部署您的项目。

Promoting project to production

开发人员将项目提升到生产环境。

下图说明了存储库、注册表和管道,以及它们如何在 Jenkins X 升级到生产环境时进行交互。以下是步骤

  1. 开发人员运行 jx promote 命令以将项目提升到生产环境
  2. Jenkins X 创建一个 PR,其中包含将项目添加到生产环境所需的更改
  3. 开发人员手动批准 PR,并将其合并到 Master
  4. Jenkins X 收到通知并运行生产管道
  5. 生产管道运行 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 条评论

很棒的文章!

关于最终限制 CRD 的一个小评论 - 许多 OSS 项目在 Kubernetes 中也是如此(例如 knative build 和 istio),这只是安装时的问题。

安装后,您可以为开发人员提供常规 RBAC 角色,并将他们隔离到集群等中单独的命名空间中

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.