您正在访问: 平码三中三 >> 资讯中心 >> 人物访谈 >> 正文

【2018可信云大会】京东石雪峰:JenkinsX基于Kubernetes的新一代CI/CD平台

文章来源:中国IDC圈 作者:【*】 点击:次 时间:2018/8/22 13:38:52

平码三中三 www.kulabu.com 石雪峰:今天很荣幸,给大家分享一下关于Jenkins X开源项目的一些最新进展,可能有的同学之前也听过我讲过这个项目,作为社区来说,对Jenkins X项目也倾注了很大的精力,不断有一些新的想法或者是工具整合进来,发布半年来始终保持着一个旺盛的生命力,所以借此机会还是给大家介绍一下代表着下一代云原生应用流水线的解决方案。

石雪峰-1

首先自我介绍一下,我是石雪峰,是Jenkins的认证工程师,也在社区参与一些活动和项目,期望更好的推进Jenkins在国内的发展,今天给大家带来的就是社区的重点项目之一Jenkins X。

可信云大会举办这些年来,云计算迅猛发展,大家从昨天的栗主任的云计算发展报告中也能看到,整个云计算行业的发展趋势依然向好,其中孕育了巨大的变革。对于我们来说,已经谈了很多理念、方法,但最终还是想通过一些具体的工具或者说技术方法帮助大家实现真正落地。面对目前这样一个云原生应用时代,DevOps、持续交付、容器和微服务是典型的代表。这一波技术变革迅猛无比又异常深刻,更重要的是不仅仅局限于单一领域,而是涉及基础设施,软件架构,部署发布方式,研发过程,组织文化等,彼此独立又互相推动,裹挟着行业向前发展。同时新技术层出不穷。前两天lstio正式发布了1.0版本,同时容器监控领域的代表项目Prometheus也正式从CNCF毕业。技术人员需要不断学习,同业务发展速度赛跑,这就是我们在云原生应用时代所面临的真正的挑战。

云原生应用架构基本上符合这种模式,包括微服务,API,消息队列,缓存和分布式数据库,面对这种全新的应用架构,我们的选择非常多,包括各种各样的开源商业工具,公有云、私有云和混合云,伴随冗余建设的基础设施,高度人员能力依赖的解决方案,大量的评估和研究成本在里面,以及组织内部的高度差异化,而这并非核心价值所在,所以平台就有了存在的意义。

在这时候Kubernetes应运而生,可以说对容器云平台而言, 它是一个改变世界的工具。的确随着Kubernetes项目的不断成熟,它为我们解决了很多云原生应用时代的难题,比如服务发现、滚动升级、弹性集群、资源管理、调度编排等等。同时Kubernetes也构建了自己的完整的生态系统从而实现了云原生应用时代的弯道超车。在这个生态系统中包括了云基础设置服务、日志监控、管理,安全等等,但唯独缺少的就是持续交付能力平台,所以我们想解决的问题是什么呢,答案就在Jenkins X。

Jenkins X是什么?简单用一句话描述,我们认为Jenkins X是Kubernetes原生的CI/CD解决方案,用于云原生应用的快速开发和部署。我们想解决的问题是为Kubernetes生态系统建立原生的CI/CD平台,复用Jenkins自身能力,简化整个云原生应用的开发,部署,运行过程。所以Jenkins X是基于Kubernetes,这是它的核心价值,另外它更面向云原生应用更适合复杂的应用架构下的系统开发。

回到设计理念层面,我相信凡是接触过DevOps,大家有听说过DevOps年度状态报告。这个报告基于一种科学的研究方法,结合大量的调查数据统计分析得出,有相当的代表性。今年推出的《加速》这本书同样是当今热点,从五大领域,二十四项能力指标帮助大家更好的落地DevOps。对Jenkins X来说,它的设计理念也借用了其中的大量能力指标,其中主要覆盖在持续交付和应用架构领域里面。所以Jenkins X更多的是想思考我们在云原生应用时代,研发工程师和CI/CD的交互方式。

那么这种交互方式是怎样的?我们看一下是不是Jenkins加Kubernetes就等于Jenkins X。答案显然是否定的,并不是说在Jenkins上安装了Kubernetes插件,动态生成资源节点就是Jenkins X。Jenkins X要做的远远不止于此,但是从另外一个角度来看,Jenkins X依然用原生Jenkins作为流水线持续交付引擎,其特性被良好封装但没有完全隐藏。一方面利用了Jenkins庞大的插件扩展能力,另外一方面也允许熟悉Jenkins的人继续它所熟悉的交互方式。这和很多公司的作为似乎有些背道而驰,其实很多公司都在使用Jenkins,但表面上却完全看不出来,因为已经对Jenkins做了完全的封装,用户只能通过前段界面和Jenkins进行交互,由此屏蔽了Jenkins本身的复杂度。这样做本来无可厚非,但是从社区的角度而言,更倾向于选择另外一条路,也就是提供一个良好封装的接口命令行工具,通过工具来完成系统交互。

所以对于Jenkins X的项目来说,如果你希望用传统的方式访问Jenkins,这是完全开放的 。但是通过封装的命令行工具,将背后多套系统打通,实现系统间的自动化代用,从而给用户带来真正的价值。作为Jenkins的一个子项目,Jenkins X也希望通过尝试帮助Jenkins自身向云原生应用转变。社区现在成立了很多SIG,就是有点类似于Kubernetes社区的兴趣小组。每一个SIG有自己的主题,大家有兴趣也可以加入。其中第一个公开的SIG就是云原生应用小组,要实现这个工作并不简单,很多年前就已经有人提出过这个想法,但对于Jenkins基于文件存储的方式来说,想要去改变要分多个阶段来逐步实现。

第一阶段要实现外部存储的支持,第二块是日志系统,第三块是配置,也就是基于YAML文件的配置方式,社区已经有很多成功的项目,大家感兴趣可以自行查阅。

回到刚才我们讲的DevOps要打破研发交付过程中的交互墙,但是交互墙不只是在组织层面的部门强,很多时候也是技术墙。比如研发人员完成代码编写要部署上线,那么不仅仅是代码,还要编写Dockerfile、Jenkinsfile、Chartfile,同时还要管理代码仓库、Webhook和构建环境工具等。越过所有的障碍才能把一行代码部署到线上的Kubernetes环境上去。这就要求一个研发工程师要拥有非常全面的知识和能力,可是研发工程师的诉求非常简单,那就是我作为一个工程师可以非常简单创建一个应用,不需要关心这中间的事情。而Jenkins X

可以解决这中间的隔阂,这也是Jenkins X给出的云原生应用时代研发工程师和CI/CD的理想关系。

Jenkins X可以帮你自动生成所需要的流水线文件,相关的容器配置,构建环境等,大大简化了代码部署上线的难度。对于Jenkins X来说,核心关注的是三个方面。第一方面是端到端,第二方面是把一些优秀实践,比如刚才《加速》一本书中的能力项内嵌到系统平台里面来。第三方面是覆盖完整的环境。这里面可以看到,包括代码仓库、流水线,应用包管理,构建都是通过Jenkins X完成的,你只需要创建一个应用就够了。当然为了实现自动化,依然要有一些专业的人员来做好预定义工作,对研发人员而言所做的工作就非常简单了。

核心特性第二点是GitOps。我们总提到研发和运维的冲突和对立,很多时候这很正常,除了组织层面的问题以外,运维都在写脚本,而研发在写JAVA代码。运维用自己的工单系统,开发用Jira需求缺陷管理系统。运维人员喜欢命令行式的黑白屏,开发喜欢彩色的IDE。天生这两个工种的差异就是巨大的。那么要解决这个问题,首先就是要把所有的环境代码化,纳入到版本控制库里面来,让大家共用一套版本控制系统。这样做的好处有几点,第一环境纳入版本控制,对所有人可见,实现全流程的变更可追溯 。

第二是把研发习惯的敏捷实践应用到运维侧,通过代码合并的方式实现应用部署。第三是打通开发的持续集成和运维持续部署的流水线。因为在实际公司里面,大多需要不同系统提供部署功能,在Jenkins X通过一条流水线支持多环境,中间通过GitOps实现。

说了很多,看下实际效果,当我们要部署应用的时候,系统提交一个PR,其中包含了应用的变更,版本,环境,这些通过运维人员审核、点击合入,后台自动完成应用部署。这和研发正常的开发流程来说并没有很大差异。

核心特性第三点是环境。在生产软件开发过程中,很多时候受限于测试环境,需要排队、等待批次、完成部署后才能实现测试环境的验证。而在Jenkins X里面,基于云的能力可以帮助你动态初始化不同类型的环境。基于不同环境,一条流水线可以呈现出不同的走向,这可以通过阶段判断来实现。核心还是希望把整个环境,从本地开发、测试、预发布到生产环境都是通过Jenkins X背后的Kubernetes去管理。

也就每次研发提交一次改动,代码管理系统里面可以自动生成测试环境访问地址,测试人员收到信息之后,通过点击链接可以快速查看改动的效果,这些帮助Jenkins X实现了快速的验证改动,避免缺陷流向下游。

整体的流程图就不细说了。简单来说Jenkins X帮助我们建立代码仓库,构建环境,自动生成流水线,这时候只要提交代码,即可生成测试验证环境,通过后promote到预发布环境或者是生产环境,体现出端到端的流水线的概念。

接下来还是简单介绍一下Jenkins X里面的组件信息。其中两个核心Jenkins和Kubernetes没什么好说的。Jenkins作为核心,和我们日常使用的版本没有任何的区别,只是把Jenkins部署到Kubernetes上而已。

几个比较核心的工具跟大家简单介绍一下。第一个是命令行工具jx,jx 就是我刚刚提到对整个Jenkins X的一个封装,很多同Jenkins,Kubernetes和流水线等的交互,都可以通过jx 统一脚本来实现。这个工具是基于GO语言写的,现在越来越多的开源项目都是采用GO语言实现,大家感兴趣的话可以了解一下。

工具提供了很多的命令,就像我刚刚提到的Jenkins X并不想把Jenkins隐藏掉,而是通过友好的方式交互,通过一两条jx命令就可以调用各个系统接口,提供给用户一种比较好的交互方式。jx是跟Jenkins X交互的一个唯一入口。详细的文档大家可以去参考项目地址。

第二块就是Helm。对简单的应用部署当然很简单,通过脚本就可以实现,但是对复杂系统来说,很难通过一个文件实现编排。最早我们是把所有的Kubernetes相关的资源文件打包成一个大而全的文件,每次都要去复制粘贴。为了解决越来越复杂的微服务项目的部署,社区提出了Helm的工具,Helm相对于 Kubernetes而言,就类似Ubuntu上的APT,和CENTOS上的yum命令。Helm把整个的Kubernetes的资源进行打包。好处第一是复用性,第二是标准化,第三是版本控制。Chartmuseum就一个仓库,用于管理Chart文件。对于Chart文件自身起始很好理解,使用的就是模板加变量的方式。通过把模板和变量分离之后,每次部署,更新应用版本的时候,都只需要在变量中进行调整,直接执行命令就可以把新的应用在Kubernetes上执行起来。

对于制品管理工具来说,Jenkins官方提供了Nexus和Docker registry,这些工具可以自行替换,但是作为演示项目默认使用了Nexus和Docker registry。

接下来是核心组件Draft。刚才我们说过Jenkins X可以自动初始化代码编译文件、环境、流水线和容器配置等,那么他是怎样实现的呢?核心就是Draft工具。它是Kubernetes运行自动化的一个套件的工具。具备强大的是语言识别能力,同时Draft里面有一个pack的概念,这个pack包含了预定义的Jenkinsfile,dockerfile,构建环境工具信息等。执行过程第一步是识别出语言类型,然后根据预定义内容来完成初始化。Draft本身来说不仅是为Jenkins X提供的,它也可以独立使用和执行,所以即便不用Jenkins X,Draft对你来说也是有用的。

上面都是Jenkins X的一些核心组件,我们发现随时都有很多的新需求会涌现出来,并提供了扩展功能给大家

< 1 2>
关注有惊喜!
中国工业电器网:此内容转载于合作媒体或互联网其它网站,中国工业电器网登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述
新闻、技术文章投稿QQ:928246603 邮箱:news@www.kulabu.com

网友评论已有人参与评论

用户登录  注册新用户  忘记密码?

本站声明:严禁任何单位和个人模仿、转载、抄袭及冒名中国工业电器网(www.kulabu.com)

平码三中三 | 诚聘英才 | 关于我们 | 会员服务 | 广告服务| 意见/业务 | 帮助中心 | 在线投稿 | 友情链接 | 联系我们 |网站地图

客服:点击这里给我发消息展会合作:点击这里给我发消息 会员合作:点击这里给我发消息 广告合作:点击这里给我发消息 战略合作:点击这里给我发消息 新闻投稿:点击这里给我发消息

中国工业电器网服务热线:400-688-6377 合作电话:021-39983999 传真:021-39983888 邮编:201812 信箱:cn@www.kulabu.com新闻投稿邮箱:news@www.kulabu.com

上海总公司地址:上海 金园一路999号(中国工业电器大厦) 法律顾问:浙江海昌律师事务所 江律师

上海易电网络科技有限公司 版权所有 2012-2020

平码三中三

沪ICP备10003932号-15