一、创立背景
Jenkins一直以来都是DevOps工具链的重要组成部分,然而在持续的高增长和巨大成功的背后,也逐渐暴露出一些痛点,,比如Master的单点故障、版本升级带来的插件版本不匹配等问题。
另外,微服务和云原生应用解决方案日臻成熟,应用架构的细分和服务间的解耦,使得服务有了独立发布的能力。在云原生时代,微服务架构下的持续集成和持续交付需求,也渴望着更加灵活的解决方案。
目前Kubernetes俨然成为容器编排领域的领导者,利用Kubernetes完成CI/CD已经成为大势所趋,但Jenkins在与代码协同工作及其配置方面并不轻松。因此,很少有开发者认为:建立Jenkins管道是在Kubernetes上实现CD的最佳实践。
面对以上挑战,开源社区开始考虑通过改进Jenkins,来方便在云端自动化地实现Kubernetes的CI/CD,这便催生了Jenkins X。
二、Jenkins X是什么?
Jenkins X 是基于 Kubernetes 的CI&CD平台,使用GO语言开发,作为Jenkins的一个子项目,通过自动化、工具化和DevOps的最佳实践,以解决微服务架构下云原生应用的持续交付的问题,简化和加速整个云原生应用的开发、运行和部署过程,从而改善了研发过程中的复杂环节,让研发可以专注于价值创造,其他的事情通通交由Jenkins X来解决,开发人员开箱即用便可。
Jenkins X 设计之初采用原生的Jenkins作为流水线持续交付引擎,但在2020年4月选择Tekton作为默认执行引擎,2021年4月发布Jenkins X 3.x GA版本,支持将Jenkinsfile自动转换为Tekton Pipepline的step运行,有相关插件支持将Jenkinsfile转换为Tekton Pipepline。
三、JenkinsX和Jenkins 异同点
1、相对于Jenkins,Jenkins X能够更好地与Docker以及Kubernetes协同工作。Jenkins X结合各种开源工具,轻松地构建云原生应用。
2、Jenkins X直接定义各种过程,而Jenkins则需要去按需适应各种过程。Jenkins X能实现的功能,Jenkins通过各种插件与集成,也能完成。
3、Jenkins X采用CLI和API优先的方法,Jenkins采用的是UI优先的方法。通过UI的配置,各项功能都是由内部插件来驱动的。
4、Jenkins X预览环境能够让开发人员协同验证各种变更,并集成到那些基于拉取请求(Pull Request)所创建的运行系统的代码库中。
四、Jenkins X架构
Jenkins X 基于松耦合架构的 DevOps 模型,被设计用来支持在多个团队间,部署大量可重复、可管理的分布式微服务。在Jenkins X的设计中,整合了Helm,Draft,GitOps,以及Nexus,chartmuseum,monocular等诸多新系统和工具,从而实现自动构建编译环境,生成容器镜像,流水线,自动化部署,并通过简单的Review实现不同环境间的自动发布。
1完美封装的命令行工具
Jenkins X 带来了一个方便使用的命令行工具 jx :
· 安装 Jenkins X 到已经存在的 Kubernetes 集群
· 创建一个新的 kubernetes 集群 并安装Jenkins X
· 导入项目到Jenkins X 中以及他们的持续部署流水线设置
· 创建新的Spring Boot应用 并导入Jenkins X 中,以及他们的持续部署流水线设置
2自动化流水线
· 选择项目类型自动生成Jenkinsfile定义流水线
· 自动生成Dockerfile并打包容器镜像
· 自动创建Helm Chart并运行在Kubernetes集群
· 自动关联代码库和流水线,作为代码变更自动触发(基于Webhook实现)
· 自动版本号自动归档
3基于GitOps的部署升级
· 所有的环境,应用列表,版本,配置信息统一放在代码库中进行版本控制
· 通过Pull Request实现研发和运维的协同,完成应用部署升级(Promotion)
· 可自动部署和手动部署,在必要的时候增加手工Review
· 当然这些都封装在jx命令中实现
五、Jenkins X 的核心组件
1、Helm
Helm是用于管理Kubernetes资源对象的工具,类似APT,YUM和HOMEBREW,通过将Kubernetes的资源对象打包成Chart的形式,完成复杂应用的部署和版本控制,是目前业界流行的解决方案。
2、Draft
Draft是自动化应用构建并使之运行在Kubernetes上面的工具,具有语言识别能力,能够自动生成构建脚本,依赖,环境并打包成docker镜像并部署在Kubernetes集群上,加快代码开发节奏,而无需关心基础设施层面的技术实现。
3、GitOps
GitOps是weaveworks基于自己多年Kubernetes实践推出的应用部署解决方案,它将Git作为整个应用部署的单一可信数据源(SSOT),通过类似代码开发的Pull Request流程完成应用部署的Review和自动化实现,并且将部署配置信息纳入版本控制。
六、Jenkins X有哪些优势?
1、易于设置:Jenkins X为不同类型的项目提供构建包、自动化安装、以及用于配置和升级的外部工具。开发人员不但能够通过单行的jx命令实现快速启动,而且可以按需掌握Jenkins X的内部管道状态。
2、隔离性:无论是在共享的集群中,还是在相互独立的集群里,每个团队都能够运行自己的Jenkins X实例。其中,在共享的集群中,每个团队不但可以拥有自己的命名空间、能有效地共享资源,而且拥有与其他团队不同的管道、数据流和配置。而在单独的集群里,每个团队都能得到自己的一组资源,完全不会受到其他团队工作流的影响。
3、更快速度:为了加速开发的进程,Jenkins X提供了强大的命令集来提速各项任务,并提供了与云端或SCM的无缝集成。例如:我们可以使用“jx create cluster gke”这一简单的命令,在Google云上安装Jenkins X。
4、更快恢复:GitOps创建了单一的“真相”源,以保证每一次拉取请求都能够得到代码所对应的版本与注释。通过Jenkins X和用户环境中的配置即代码,开发人员能够获取正确的上下文、和可追踪的信息,进而更快地解决各种中断问题。
5、可预测版本:Jenkins X通过“jx create devpod”命令,来创建各种开发与测试环境,以便开发人员在Jenkins X集群中获取自己的沙箱。由于开发构建环境中的pod与生产环境中管道里的pod相同,因此,它能够确保代码以一种可预测的方式被执行。此外,在代码被提交到生产环境之前,Jenkins X还有利于预览环境的spin up。总的说来,所有这些特性都有助于开发人员交付出稳定的程序代码。