【问题标题】:CI/CD pipeline deployment flow for test and prod environment测试和生产环境的 CI/CD 管道部署流程
【发布时间】:2018-10-30 20:22:25
【问题描述】:

我正在尝试为在 Spring Boot 中创建的微服务部署实现 CI/CD 管道。我正在尝试使用我的 SVN 存储库、Kubernetes 和 Jenkins 来实现管道。当我探索使用 Kubernetes 和 Jenkins 的部署时,我发现了通过在 Jenkinsfile 中创建和定义在测试和生产环境中部署的教程和许多视频。并且还在 Jenkins 配置中添加了 shell 脚本。

混乱

在这里,我感到怀疑,当我们部署到测试环境中时,如何在正确的测试完成后将其部署到 prod 环境中?我需要为产品添加单独的 shell 脚本吗?或者我们是否使用一个脚本进行串行部署,用于测试和生产?

【问题讨论】:

  • 能不能加上你引用的shell代码?

标签: jenkins kubernetes


【解决方案1】:

如何做到这一点完全取决于您。通常,我们为 prod 和 staging(等)创建单独的 k8s 集群。您的 Jenkins 需要根据您的管道部署到不同的集群。如果您想要一个真正的 CI/CD,那么一个管道就足够了 - 它将部署到两个集群(或环境)。

大多数情况下,企业不希望 CI 用于生产(原因很明显)。他们希望在将 QA 环境部署到生产环境之前对其进行手动测试。

由于 k8s 是基于容器的,因此将相同的映像部署到不同的环境非常容易。您只需构建一次 Spring Boot 应用程序,然后根据需要将其部署到不同的环境中。

一个简单的管道:

  1. 已触发代码推送和构建。
  2. 使用单元测试构建。
  3. 生成 docker 镜像并推送到注册表。
  4. 运行你的 kubectl / helm / etc 来部署新构建的镜像 分期
  5. 检查部署是否成功

如果您想将其部署到 prod,请继续管道(您也可以在此处暂停以进行 QA 以及 https://jenkins.io/doc/pipeline/steps/pipeline-input-step/):

  1. 运行你的 kubectl / helm / etc 来部署新构建的镜像 生产
  2. 检查部署是否成功

如果您的 QA 需要更多时间,那么您也可以创建一个不同的 Jenkins 作业并手动触发它(甚至 QA 工程师也可以触发)

如果你的 QA 和 PM 是技术人员,那么他们还可以合并分支或关闭 PR,这可以自动触发 jenkins 并运行 prod 部署。

编辑(回复评论): 您正在对 k8s API 进行 REST 调用。甚至kubectl apply -f foo.yaml 也会打这个电话。从哪里进行调用并不重要——只要你的 kubectl 配置正确并且可以与 k8s 服务器通信。您可以为 kubectl 配置多个集群并使用 kubectl --context <staging-cluster> apply -f foo.yaml。您可以从 jenkins env 变量或其他机制中选择上下文名称。

【讨论】:

  • 好的。感谢您的回复 Amrit Bera 先生。让我澄清一下,我可以在测试和生产中使用相同的集群(3 台主机和 9 台工作机/节点 HA 集群)吗? .我打算在集群的一个节点上安装 jenkins。那么是否可以部署在另一个集群中?因为我在我的第一个集群中安装了 Jenkins。那么我如何在另一个集群中部署呢?你能澄清我的困惑吗?
【解决方案2】:

我们正在开发一个名为 Jenkins X 的开源项目,这是 Jenkins 基金会提出的一个子项目,旨在使用 Jenkins 和 GitOps 在 Kubernetes 上自动化 CI/CD 以进行推广。

当您将更改合并到 master 分支时,Jenkins X 会为您的应用创建一个新的语义版本化发行版(pom.xml、jar、docker image、helm chart)。然后,管道会自动生成拉取请求,以通过 GitOps 在所有环境中推广您的应用程序。

这里是 a demo of how to automate CI/CD with multiple environments on Kubernetes using GitOps,用于在 Pull Requests 上的环境和预览环境之间进行推广 - 使用 Spring Boot 和 nodejs 应用程序(但我们支持多种语言 + 框架)。

【讨论】:

    猜你喜欢
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2018-08-03
    相关资源
    最近更新 更多