【编者的话】 Jenkins X 是一个高度集成化的CI/CD平台,基于Jenkins和Kubernetes实现,旨在解决微服务体系架构下的云原生应用的持续交付的问题,简化整个云原生应用的开发、运行和部署过程。Jenkins X带来了以下新的特性:自动化一切,基于GitOps的环境一键部署,自动生成预览环境和信息同步反馈。 Jenkins X和Kubernetes的结合给自动化的运维带来了新的高度。
Jenkins 持续集成服务器一直是DevOps革命的主要组成部分。作为持续集成和持续部署环境中的自动化任务的中央协调服务器,全球的开发和运营团队已经接受Jenkins,并为之构建了Jenkins的扩展和构建包。 然而,迁移到基于容器的环境并不是Jenkins构建的空间。
Cloudbees 的高级架构师James Strachen 是 Jenkins X 的项目负责人,他一直在思考这种迁移对Jenkins用户的意义。
他表示,将CI / CD管道迁移到使用容器和容器编排器(如Kubernetes)的基于容器的云托管环境时,
需要在构建、测试和部署过程中实现更多自动化。Strachen说:“ 为了实现这一点,Jenkins X需要比常规Jenkins更容易理解和使用。”
“我们所要做的是打破一到两个人之间的隔阂,他们对Jenkins很了解,但是团队里的每个人都想做些事情。”我们需要开发人员随时根据需求可以启动新的项目,这是微服务的时代最大的不同。我们想让Jenkins自助服务像云一样。
“Jenkins X的目标是将Jenkins变成一个自助服务设备,因此任何开发人员都可以启动一个新项目,
所有管道和一切都会发生。 我们并不是说你的团队就不用了解Jenkins ,更重要的是我们试图让CI / CD更像是其他云设备,“他说。
Strachen在3月中旬的 一篇博文 中详细介绍了Jenkins X的技术细节,当时该项目首次向公众公布。文章中他解释说,Jenkins X可用于设置Jenkins管道,自动生成Jenkinsfile和Dockerfile以定义应用程序的管道和打包步骤。
由于 Docker 和 Kubernetes 的行为与Jenkins成长环境中的某些环境不同,Strachen说Jenkins X为了将安全引入到复杂的容器图像构建过程中。Strachen说,用户可以使用自己的Dockerfiles或pop在管道中使用他们喜欢的容器构建工具。Strachen指出, Skaffold 是一种用于构建和标记Docker图像的工具,尽管听起来很简单,但他说这是一笔很大的交易。
“[Skaffold]负责管理Docker和安全模型的复杂性。 如果您使用Google Cloud,则可能需要使用Google的容器构建器。 您可能想在您的Kubernetes集群中使用SaaS CI或本地Docker套接字。 这具有安全隐患,因为它可以让你根植于盒子,所以你绝对不会让别人访问生产集群中的Docker套接字,例如,“Strachen说。 “默认情况下,Jenkins S假设你在一个开发集群中,并有权访问Docker套接字,但我们知道还有其他选择。”
Strachen认为这是构建Docker映像的主要问题,在未来。“我们需要像Skaffold这样的工具来隐藏用户的混乱。”我希望很快就能修好。他曾听到有人私下抱怨说,Skaffold可能会在几个月内解决这个问题。
“在开发群集上,你让人们使用Docker来构建图像。 你相信你的开发者不会挖掘比特币。 在生产群集上,你永远不会构建图像,只需使用它们即可。 这是一个简单的方法,很容易做到,而不是太可怕,“Strachen说。 “我认为从长远来看,通过能够在不使用Docker守护进程或root或特殊权限的情况下构建Docker镜像,将Docker构建物拖出Kubernetes集群会更好。”
未来,Strachen表示Jenkins X团队在稳定性和兼容性方面有很多目标。 “主要的是检查每个人都适用的一切。 在同一时间支持大量的云非常具有挑战性。 试图获得一个坚如磐石的集群系统是第一个重点。 另一个重点是支持更多的git提供商和问题跟踪器。 我们正在添加 Jira 支持,并且社区中的一群人正在扩展到其他git提供者,如 GitLab 和 BitBucket ,“Strachen说。
“我们更长期的工作是围绕改进反馈和整合等等。 我们有一个大的路线图,主要围绕增加构建包的数量。 我们需要添加更多的语言,“Strachen说。
核心开发团队正在研究的另一件事是与Anchore CI / CD安全扫描软件集成。 Anchore 根据漏洞数据库分析代码和Docker镜像。
然而,在所有这些复杂的目标中,Strachen所说的一段代码已经为Jenkins X团队节省了大量时间:UpdateBot。 这个小工具运行在其他项目中更新库依赖项的库中,自动提交请求以利用新的依赖项。
“有时候你在使用上游类库工作,”Strachen说,“其他团队正在使用下游类库工作。通常情况下,如果没有信息交换,类库很少更新。如果您正在更新库,则需要将什么库持续进程进来。 UpdateBot 要做的就是处理这些持续集成类库的原则。类库不会部署成为Docker镜像,但它们会作为版本更改,更新的XML文件或基础Docker镜像文件进行部署。“
Strachen表示,向正在更新的库的所有下游消费者推送请求的简单行为可以防止错误在较大的更新周期后隐藏起来。
“我特别喜欢的事情是,如果上游开发者破坏了一些东西,他们知道,因为在发布的版本中,所有这些请求都会失败。当一支球队为另一支球队打球时,你可以避免摩擦和挫折感。今天打破它的团队常常不知道他们破坏了任何东西。因为改变通常需要很长时间才能通过组织扩散,当你意识到某些事情已经破裂时,你已经完成了700次更改,而且你不知道哪一个会破坏它,“Strachen说。
原文链接: jenkins-x-brings-automated-pipelines-to-kubernetes (翻译:ylzhang)