首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

14 张图详解构建全自动化 Helm 打包测试发布 CICD 流程

在本文中,您将学习如何创建 Helm chart 并将其发布到公共存储库中。我们将为基于 Spring Boot REST 的应用程序准备一个 Helm Chart 作为练习。目标是拥有一个完全自动化的过程来构建、测试和发布它。为此,我们将在 CircleCI 中定义一个管道。此 CI/CD 管道将在公共Artifact Hub[1]中发布 Helm Chart。

源代码

如果您想自己尝试,可以随时查看本次演示中的源代码。为此,您需要克隆 GitHub 存储库[2]。

创建 Helm Chart

在这部分练习中,我们将使用 CLI。在整个过程中,本地安装的 Helm 不是必需的,但可以帮助您了解接下来的步骤会发生什么。因此,最好安装它。请参考 Helm 官方文档[3]以找到安装方法。

在第一步中,我们将创建一个示例 Chart。它是网络应用程序的典型 Chart。例如,它在容器外部公开 8080 端口,或者允许我们定义检查 HTTP 端点的活动性和就绪性探测。这个 Helm chart 不能太复杂,也不能太简单,因为我们要为它创建自动化测试。

这是我们的模板。它将一些标准标签添加到部署清单中。它还设置资源请求和限制,正如我之前提到的,Chart 已经添加了 liveness probe 和 readiness probe。并公开端口 8080 。我们也可以直接设置环境变量或从 和 中注入环境变量。

还有一个对象模板。

现在,可以用默认值填充模板。示例存储库中提供了以下 文件。

您可以使用 CLI 轻松测试新创建的模板。为此,只需在存储库根目录中执行以下命令。将看到从示例模板创建的 YAML 清单。

这样的测试方法是可以的,但是只是在 Chart 开发过程中在本地运行它。假设我们需要创建一个交付管道,我们需要一个更高级的工具。

Helm Chart 的单元测试

在我看来,CI/CD 流水线中最重要的是自动化测试。没有它,我们将发布未经验证的软件,这可能会导致许多并发症。单个 Helm Chart 可以被多个应用程序使用,因此我们应该尽一切努力对其进行详细测试。幸运的是,有一些专门用于 Helm Chart 测试的工具。

我的选择了helm-unittest[4]。它允许我们用纯 YAML 编写单元测试文件。我们可以将其安装为 Helm 插件或在 Docker 容器中运行。在将其推送到 Git 存储库之前,在本地进行验证工作:

我们应该将单元测试放在 Chart 中的目录中。这是 Chart 存储库的结构:

第一步,我们创建单元测试文件。如前所述,我们可以使用 YAML 符号创建测试,这非常直观。我们需要传递值文件的位置和经过测试的 Helm 模板的位置。在测试部分,我们必须定义一个断言列表。重要的是我可以轻松测试每个 YAML 清单的路径。它可以是精确比较或正则表达式。它还支持用于 mappings 和 arrays 的 JsonPath。这是测试用到的:

现在,可以通过在项目根目录下执行以下命令来在本地验证测试:

目前,目录中只有一个 Chart。假设我们有很多,它会运行所有 Chart 的测试。这是得到的结果:

如果在测试中改变了一些东西来破坏它。现在,结果将如下所示:

CircleCI 中的 Helm Chart 发布管道

一旦我们创建了 Chart 和测试,我们就可以继续进行交付管道。在 CircleCI 管道中,不仅要执行与之前相同的步骤,还需要包括一个发布部分。

首先,将使用 GitHub Releases 和 GitHub Pages 来发布和托管 Chart。为了简化流程,我们可能会使用一个专门用于发布 Helm Chart 的工具:Chart Releaser[5]。

我们还需要创建一个个人令牌以传递给 Helm Chart Release 工作流程。访问 。使用范围的权限生成个人令牌。然后,应该将这个标记放入 CircleCI 上下文中。您可以为上下文选择任何名称,但环境变量的名称必须是,Chart Releaser 需要该名称。我的上下文的名称是.

以下是需要在管道中执行的步骤列表:

在机器上安装 CLI(我们将使用镜像作为测试执行器)

安装 Helm 插件

运行单元测试

只有当我们在分支中进行更改时,才会进行发布部分。第一步,需要用命令打包 Chart

安装 Chart Releaser

使用 Chart Releaser 的命令在 GitHub 中发布 Chart

生成 Chart 并将其发布到 GitHub Pages

现在让我们定义的 CircleCI 管道。首先,需要在存储库根目录中创建目录并将文件放在那里。我们可以使用 orb 来简化 helm CLI 安装的过程。一旦我们安装了 helm CLI,我们就可以安装插件并运行单元测试。然后我们定义一个过滤分支的规则。如果更改被推送到分支,我们将 Chart 打包为 TAR 存档并将其放在目录中。然后我们安装 Chart Releaser 并创建一个 GitHub release。在最后一步中,我们使用 Chart Releaser 生成 index.yaml 文件并将其提交到分支。

执行 Helm Chart 发布管道

一旦我们将更改推送到存储库,管道就会启动。如您所见,管道成功完成。我们正在发布 Chart 版本。

让我们看看 GitHub 发布的列表。如您所见,该版本已经发布。

如何访问 Helm 存储库。为了检查它,请转到存储库Settings > Pages。该存储库的 GitHub 页面地址是 Helm 存储库的地址。在那里发布,内容包含了存储库中 Chart 定义的文件。如您所见,Helm 存储库的地址是:

我们可以通过调用 URL 来查看文件的结构。这是当前发布版本的片段。

假设我们想要使用 Helm Chart,可以轻松访问它。首先,使用 CLI 添加 Helm 存储库:

然后,可以验证存储库中存在的 Helm Chart 列表:

将 Helm Chart 发布到 Artifact Hub

为了在 Artifact Hub 上发布您的 Helm 存储库和 Chart,您需要转到该artifacthub 站点[6]并创建一个帐户。完成后,只需单击按钮即可添加新存储库。然后你只需要选择你的 repo 的名称并输入正确的地址。

现在,我们可以在包列表中找到我们的 Chart。

可以看到它的细节。值得在文件中发布一些说明文字。完成后,您可以在 Artifact Hub 的 Chart 详细信息中查看它。

最后,我们可以轻松地使用 Chart 部署 Spring Boot 应用程序,例如使用 Argo CD。

作者:Piotr

出处:https://goo.gs/5ngvd

参考资料

[1]

Artifact Hub: https://artifacthub.io/

[2]

存储库: https://github.com/piomin/helm-charts.git

[3]

文档: https://helm.sh/docs/intro/install/

[4]

helm-unittest: https://github.com/helm-unittest/helm-unittest

[5]

Chart Releaser: https://github.com/helm/chart-releaser

[6]

artifacthub 站点: https://artifacthub.io/

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230315A01MSM00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券