测试和生产环境的 CI/CD 管道部署流程



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

混乱

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

这完全取决于你想如何做到这一点。通常,我们为生产和暂存(等(创建单独的 k8s 集群。您的 Jenkins 需要部署到不同的集群,具体取决于您的管道。如果需要真正的 CI/CD,则一个管道就足够了 - 它将部署到两个群集(或环境(。

大多数时候,企业不希望在生产中使用CI(出于显而易见的原因(。他们希望在将 QA 环境部署到生产环境之前对其进行手动测试。

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

一个简单的管道:

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

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

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

如果你的 QA 需要更多时间,那么你也可以创建一个不同的 Jenkins 作业并手动触发它(即使是 QA enggs 也可以触发它(

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

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

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

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

下面是一个演示,介绍如何使用 GitOps 在 Kubernetes 上使用多个环境自动化 CI/CD,以便在环境和拉取请求上的预览环境之间进行提升 - 使用 Spring Boot 和 nodejs 应用程序(但我们支持多种语言 + 框架(。

最新更新