Jenkins X的“前世今生”
Jenkins X能够给开发人员带来诸如:更快的软件交付版本,更简单的安装与配置,以及随着时间的推移,不断增强的业务连续性等优势。
在本文中,我将总结并回答一些关于Jenkins X的最常见问题,以及它的各种重要特性与优势。
Jenkins X是什么?
CloudBees公司的杰出工程师、及Jenkins X的首席设计师,James Strachan将Jenkins X定义为:针对Kubernetes原生应用的一种开源式持续交付的方式,其用户不必过于关注各种底层的架构。Jenkins X支持包括Amazon、Azure、Google、IBM Cloud、OpenShift、以及Pivotal等主流云平台。作为Jenkins的一个子项目,Jenkins X通过自动化、工具化和DevOps的最佳实践,提高了开发的速度,并改进了CI/CD。
有了Jenkins X,我们便可以轻松快捷地使用Kubernetes来配置复杂的生态系统。它不但在系统内部减少了操作的复杂性,还提供了简单易学的对于工具的选择方法(https://www.cloudbees.com/blog/business-value-jenkins-x-automating-continuous-everything-kubernetes)。因此,Jenkins X可以确保在项目启动时,我们不必花费大量的时间去创建结构、或收集所需的各种文件。如果您需要一个Kubernetes集群的话,那么就不必担心相关的安装与配置,所有的工具都能够自动化地工作在该环境之中。事实上,您只需要在Jenkins X中输入一条jx命令(请参见https://jenkins-x.io/commands/jx/),它就能创建出CD管道、Git存储库、以及设置好webhookes。
Jenkins和Jenkins X有什么区别?
不同于Jenkins,Jenkins X经历了重塑,能够更好地与Docker以及Kubernetes协同工作。当然,Jenkins和Jenkins X也有着密切的相关性,那些Jenkins X能够实现的功能,Jenkins通过使用各种插件与集成,也能完成。不过,Jenkins X在许多方面都进行了简化。通过赋能,您可以使用Helm、Draft、Monocular、ChartMuseum、Nexus、以及Docker Registry等开源工具,来轻松地构建云原生应用。
具体说来,Jenkins X直接定义了各种过程,而Jenkins则需要去按需适应各种过程。凭借着配置即代码(Configuration-as-Code)的特性,Jenkins X采用了CLI和API优先的方法,并包含了诸如Helm和Monocular等外部工具。然而,Jenkins采用的是UI优先的方法。通过UI的配置,各项功能都是由内部插件来驱动的。此外,Jenkins X的预览环境能够让开发人员协同验证各种变更,并集成到那些基于拉取请求(Pull Request)所创建的运行系统的代码库中。
Jenkins X由何而来?
近几年来,软件开发过程得到了彻底的变化与发展。通过使用DevOps,开发人员在应用程序与配置管理方面的责任增强了许多。虽然DevOps的宗旨是提升开发的速度、降低宕机的时间风险,但是从开发角色转变为运营角色,对于开发人员来说并非总是一帆风顺。DevOps在被广泛采用与接纳的同时,也给各个行业带来了如下变革:
微服务体系结构:虽然公共云、私有云和混合云的部署模式,已在业界广为推行,但是对于应用程序的部署、管理和更新,仍存在着尚未解决的问题。在此背景下,微服务架构应运而生。与单体应用不同,基于微服务的应用程序可以被部署到较小的、可独立发布与扩容的主机上。如今,Amazon、eBay、PayPal和Netflix之类的大型企业,都将应用程序从单体模式(monolithic)迁到了微服务架构中。
容器生态系统:如今,提供操作系统虚拟化的容器,也被普遍地应用到了解决与微服务相关的问题上。在同一台主机里,由于我们能够使用具有不同技术与框架的容器,来部署和构建不同的微服务。因此开发人员既可以使用他们所熟悉的编程语言,又能够在容器的内部封装各种依赖关系。同时,容器也会比仅做硬件虚拟化的虚机(VM)更加高效。而能够移动容器的Docker,在其Dockerhub的公共存储库中拥有着预先配置好的各种Docker镜像,它们可供各大开源社区广泛地使用。这些优势都使得容器成为了云端代码部署的默认选择。
Kubernetes的崛起:当然,容器在管理和编排事务方面却面临着与VM相似的挑战。对于任何组织来说,为了合理地利用好从云服务商处购置来的内存、CPU或存储空间,他们需要具有自动化移动容器的能力,进而提升效率并优化各种操作。Google就是通过Kubernetes这种开源的解决方案,简化了容器的安装、升级和编排。与其他云服务商的容器协调方案相比,Kubernetes提供了一个通用的平台,能够处理所有类型的云服务,甚至是一些内部基础架构的容器。
然而,上述工具往往是针对某个特定问题的一小部分所构建的。因此,面对各种玲琅满目的生态系统,开发人员经常无法选择出最适合自己的CI/CD工具。他们往往需要将时间花费在了解、甚至是调整自己的CI/CD设置上,而不是真正的开发之中。可见,他们渴望有一种直截了当的方法,来管理Kubernetes集群,并对生产环境中的Kubernetes进行有效的监控。
话说回来,虽然Jenkins可以帮助开发人员充分地利用Kubernetes的CI/CD设置,但是在选择真正能够与代码协同工作的插件组合、及其配置方面可并不轻松。因此,很少有开发者会认为:建立Jenkins管道是在Kubernetes上实现CD的最佳实践。
面对这些挑战,开源社区开始考虑通过改进Jenkins,来方便在云端自动化地实现Kubernetes的CI/CD,这便催生了Jenkins X项目(https://jenkins-x.io/)。
Jenkins X的主要特点是什么?
遵循DevOps最佳实践的Jenkins X是为开发人员所创建的,它旨在加快代码的转化。它可以提供预览的环境,简化DevEx的集群创建,并能够运行在不同云服务商的集群环境之中。使用Jenkins X的最大优点是:在无需对Kubernetes的内部构造深入了解的情况下,开发人员便可以立刻上手其生态系统。由于所有的组件都已经在Git中被版本化了,因此如果需要通过定制安装,以适应特定的环境或工作流的话,我们可以对底层的Docker文件、Jenkins X管道、Jenkins文件、以及Helm图表进行调整。下面是社区里经常提及的Jenkins X的主要特征:
自动化CI/CD:Jenkins X提供了一整套jx命令行工具,允许用户将Jenkins X安装在现有的或全新的Kubernetes集群上,通过导入各个项目之中,进而最终引导到新的应用里。此外,Jenkins X还能够为各种项目自动地创建管道。
GitOps改进环境:Jenkins X允许用户使用Kubernetes的命名空间,来创建不同的虚拟环境,以用于研发、后续阶段、以及产品之中。每一种环境都能够获取到特定的配置、应用版本化的列表、以及存储在Git库里的配置。在这些环境之间,应用对于新版本的promotion(对Git环境产生拉取请求),能够通过遵循GitOps的各种实践(https://www.cloudbees.com/blog/gitops-dev-dash-ops),来自动完成。此外,开发人员也能够手动将代码从一个环境提交到另一个环境,并按需改变或配置新的环境。
预览环境:虽然用户可以手动创建预览的环境,但是Jenkins X也会自动为每个拉取请求创建一个预览环境。籍此,用户可以在合并之前,就预览到变更的效果。此外,为了方便预览,Jenkins X还会为拉取请求添加一个带有链接的注释。
您可以通过链接,来了解更多有关Jenkins X的特点。
Jenkins X有哪5大优势?
易于设置:Jenkins X为不同类型的项目提供构建包、自动化安装、以及用于配置和升级的外部工具(包括:Helm、Skaffold和Monocular等)。开发人员不但能够通过单行的jx命令实现快速启动,而且可以按需掌握Jenkins X的内部管道状态。
隔离性:无论是在共享的集群中,还是在相互独立的集群里,每个团队都能够运行自己的Jenkins X实例。其中,在共享的集群中,每个团队不但可以拥有自己的命名空间、能有效地共享资源,而且拥有与其他团队不同的管道、数据流和配置。而在单独的集群里,每个团队都能得到自己的一组资源,完全不会受到其他团队工作流的影响。
更快速度:为了加速开发的进程,Jenkins X提供了强大的命令集来提速各项任务,并提供了与云端或SCM的无缝集成。例如:我们可以使用“jx create cluster gke”这一简单的命令,在Google云上安装Jenkins X。如果将参数改为eks则适用于AWS。同理,在Azure中可以使用aks、而Oracle里则可使用oke。此外,各种应用程序的代码、以及与容器、包、管道的配套文件,都可以被存储在一个公共的库中,开发人员开箱即用(out of the box)便可。
更快恢复:GitOps创建了单一的“真相”源,以保证每一次拉取请求都能够得到代码所对应的版本与注释。通过Jenkins X和用户环境中的配置即代码,开发人员能够获取正确的上下文、和可追踪的信息,进而更快地解决各种中断问题。