我的公司已决定过渡到基于微/服务的体系结构。
在过去的几个月里,我们一直在做一系列的研究,研究这个东西的架构到底是什么样子的。
到目前为止,我们已经决定:
- 用于服务开发的. net核心(尽管语言不可知性在某种程度上是最终目标)
- 消息代理的Kafka
- Docker
- 库贝内特
- 安斯比尔
我们有一个非常基本的概念验证工作,这似乎已经勾选了所有正确的方块与管理团队,是一个绝对的喜悦与工作。
我的下一个任务是研究开发工作流实际工作方式的选项。他们已经习惯于以CI/CD的方式工作,他们的一些较新产品使用Jenkins/Octopus Deploy。
我的问题是:在部署到Kubernetes集群时,对于设置CI/CD管道,你们中是否有人有明确的建议?
必须具备的条件包括:
- 多个环境,即集成、测试、用户验收测试、试运行、生产。
- 一种方法,通过该方法,不同的业务部门可以独特地处理不同环境的部署(开发只能推进到集成,测试人员只能推进到测试,等等)。这可能是他们最大的要求--他们习惯了和章鱼一起工作,他们喜欢它处理这个问题的方式。
- 只需单击一个按钮(或使用尽可能少的步骤)即可进行回滚/部署。
我们最初会部署到我们自己的服务器上。
过去几天我一直在寻找各种选择,其中有很多。
到目前为止,Jenkins管道似乎可以是一个伟大的开始。Spinnakar似乎也是一个坚实的选择。我确实对Fabric 8有一些了解,虽然它提供了我所要求的很多东西,但它似乎有点矫枉过正。
3条答案
按热度按时间zour9fqk1#
如果您想使用Jenkins,管道确实是一种选择。我们的设置几乎可以满足您的需要,因此,让我来解释一下我们是如何设置的。
我们使用安装了
docker
和kubectl
的Jenkins代理。该代理首先构建Docker容器并将其推送到我们的Docker注册表。然后,它将在各个阶段调用kubectl
,以部署到我们的测试、验收和生产集群。**不同的业务部门:在Pipeline中,您可以使用an input step询问Pipeline是否应该继续。您可以指定可以按下按钮的人员,因此这就是您解决部署到不同集群的方法。 (理想情况下,当您使用CD时,人们会意识到每天按几次按钮是很愚蠢的,他们只会自动执行整个部署。)
**回滚:**我们依靠Kubernetes得回滚系统来实现这一点.
**凭据:**我们使用Ansible将不同的Kubernetes凭据直接提供给此Jenkins代理。
为了减少代码重复,我们引入了一个共享的Jenkins Pipeline library,因此每个(微)服务都以标准化的方式与所有Kubernetes集群通信。
请注意,我们使用的是普通的Jenkins、Docker和Kubernetes。可能有大量的软件可以进一步简化这个过程,所以让我们把这个问题留给其他答案。
mrphzbgm2#
我们正在开发一个名为Jenkins X的开源项目,这是Jenkins基金会的一个拟议子项目,旨在使用Jenkins管道和GitOps在Kubernetes上自动化CI/CD,以便跨环境推广。
如果你想了解如何使用GitOps在Kubernetes上的多个环境中自动化CI/CD,以便在Pull Requests上的环境和预览环境之间进行升级,你可能想查看my recent talk on Jenkins X at DevOxx UK,我在GKE上做了一个现场演示。
x7rlezfr3#
查看使用Github Actions作为k8s CI/CD工具的完整示例。devel git分支上的提交会自动对开发环境进行更改,prod分支上的提交(从devel合并)会对prod环境进行更改。Ansible vault和github secrets可以在不泄露密码的情况下进行协作。
https://github.com/skosachiov/ansiblecd