【问题标题】:How can I use Azure Devops Release Pipeline Variables in a Kubernetes CI/CD with Helm?如何在带有 Helm 的 Kubernetes CI/CD 中使用 Azure Devops 发布管道变量?
【发布时间】:2020-11-09 17:21:33
【问题描述】:

我目前正在使用 Helm 和 Azure DevOps Server 为我的客户在 Harbor 上托管的新 Kubernetes 集群设置 CI/CD 管道,但我对如何处理应用程序变量(appsettings在 .NET Core 中)以一种简化的方式。目前,这些变量作为发布变量存储在 DevOps 中,并且一些 Prod 变量由另一个组织管理。

我的想法是我想要单独的 Build 和 Deploy 管道,Build 负责恢复、构建、触发单元测试,最后将 Docker 映像推送到本地注册表。然后,有多个 Deploy 管道代表各种环境(Dev、Test、Stage、Prod)和可能想要使用该 Docker 映像的应用程序,并利用它们自己的配置。

但是,我无法找到一种方法,允许我在发布步骤中将发布管道中的变量注入到 dockerized 应用程序中,因为那时我所拥有的不是我的原始应用程序,而是 Docker它的图像。我以前使用 ConfigMaps 来解决此问题,但由于我无法在本地拥有文件来表示 Prod 环境,因此我需要一些方法来覆盖变量,或从 Azure Devops 的发布变量生成 ConfigMap。

不知何故,我觉得这一定是一种常见情况,但我发现的大多数解决方案要么与在应用程序的存储库中维护面向环境的配置映射或值文件有关,要么使用 Azure Cloud 看似独有的功能。

一种解决方案是将docker build/push 步骤移动到发布管道中,并在被docker化之前将变量注入应用程序。然而,这感觉就像是一种 hack,它只会导致同一应用程序的无数 Docker 镜像,但带有经过调整的 appsettings 文件,必须以某种方式跨多个环境进行版本控制。

【问题讨论】:

  • 据我所知,您可以在构建和发布阶段使用大多数 Azure Pipelines 任务。没有这方面的经验,但如果您可以在发布期间使用 this jinja2 templating extension 可能值得一试,以便您可以将发布变量应用于每个环境的 configmap 模板
  • 嗨@PatrickLu-MSFT,我们仍在调整我们的设置,所以我不愿标记答案或用我自己的答案。但我可以说,您链接的第一个博客有助于创建我们当前的 WIP 解决方案,所以我感谢您(以及回复)!

标签: docker kubernetes .net-core azure-devops azure-pipelines


【解决方案1】:

您可以尝试通过Kubernetes manifest task 处理此问题。

在构建或发布管道中使用 Kubernetes 清单任务来烘焙 并将清单部署到 Kubernetes 集群。

如果您的构建和部署都在 Azure Pipelines 中运行,那么您确实有一个前一层,我们可以在将清单应用到集群之前进行这些替换。

可以在多个范围级别定义变量,其中更直接的级别将覆盖最远的级别。

它还能够将相同的清单应用到两个环境(暂存和生产)但具有不同的设置

你也可以看看下面的博客:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    相关资源
    最近更新 更多