我正在尝试为我在Spring启动时创建的微服务部署实现CI / CD管道。我正在尝试使用我的SVN存储库,Kubernetes和Jenkins来实现管道。当我使用kubernetes和jenkins探索部署时,我通过在Jenkinsfile中创建和定义,找到了在测试和prod环境中部署的教程和许多视频。并在Jenkins配置中添加shell脚本。
混乱
在这里,我怀疑当我们部署到测试环境中时,如何在完成适当的测试后将其部署到prod环境中?需要为prod添加单独的shell脚本吗?或者我们是否使用一个脚本连续部署测试和产品?
任何人都可以帮我澄清对jenkins kubernetes deploymnt管道流程的疑问
答案 0 :(得分:1)
完全由你决定如何做到这一点。通常,我们为prod和staging(等)创建单独的k8s集群。您的Jenkins需要根据您的管道部署到不同的集群。如果你想要一个真正的CI / CD,那么一个管道就足够了 - 它将部署到集群(或环境)。
大多数情况下,企业不希望生产中的CI(出于显而易见的原因)。他们希望在QA环境部署到产品之前进行手动测试。
由于k8s是基于容器的,因此将相同的图像部署到不同的环境非常简单。您只需构建一次Spring启动应用程序,然后根据需要将其部署到不同的环境中。
一个简单的管道:
如果要将其部署到prod,请继续使用管道(您可以在此处暂停以获取QA https://jenkins.io/doc/pipeline/steps/pipeline-input-step/):
如果你的QA需要更多时间,那么你也可以创建一个不同的Jenkins作业并手动触发它(即使是QA enggs也可以触发它)
如果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变量或其他一些机制中选择上下文名称。
答案 1 :(得分:1)
我们正在开发一个名为Jenkins X的开源项目,该项目是Jenkins基金会的一个拟议子项目,旨在使用Jenkins和GitOps进行促销,自动化Kubernetes上的CI / CD。
当您将更改合并到主分支时,Jenkins X会为您的应用创建一个新的语义版本分发(pom.xml,jar,docker image,helm chart)。然后,管道自动生成Pull请求,以通过GitOps在所有环境中推广您的应用程序。
使用Spring Boot和nodejs应用程序(但我们支持多种语言+框架),环境和Pull请求预览环境之间的升级a demo of how to automate CI/CD with multiple environments on Kubernetes using GitOps。