加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 云计算 > 正文

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

发布时间:2018-08-23 07:31:10 所属栏目:云计算 来源:中国IDC圈
导读:石雪峰:今天很荣幸,给大家分享一下关于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的一些核心组件,我们发现随时都有很多的新需求会涌现出来,并提供了扩展功能给大家做一个分享。实际上说道Jenkins X并不希望以后所有公司都能使用这样一套工具,至少目前差距还比较远,所以更多的想把设计思路跟大家分享。那么在你们自己开发流水线工具的时候可以一定程度借鉴Jenkins X的思路。

刚才提到的环境管理,更多的是预览环境和生产环境,而很多公司里面研发环境是一个空白,研发人员使用自己的笔记本开发,发现问题的时候,总说不清是谁的问题。Jenkins X提供了研发环境,保证了本地环境和线上环境的一致性。第二个是修改代码自动完成环境部署。第三个是通过IDE实时打通,目前对主流的IDE都提供插件,你可以在IDE中看到流水线的日志和状态,包括生成项目的地址等,也就是研发人员来说最终只要在IDE中工作就可以了。这些都是DevPod想解决的问题。对IDE来说,插件打通不难理解,但如何实现修改代码自动完成部署,这里面用到一个新的工具,是谷歌开源出来的。它的功能非常神奇,只要本地修改代码,会自动检测到代码变动,并完成构建、推送、部署,真正实现了研发只要改代码,所有的工作都自动完成。当在本地环境验证OK后,就可以提交代码并随着流水线自动生成环境。这些都是使用的Skaffold工具。它可以对接很多的基础设施类型,不管是公有云、私有云还是本地的环境都可以支持,大家感兴趣的可以看一下。

最后再描述一下DevPod的工作过程。研发去下载代码,在本地工作空间进行开发,所有代码变更通过刚才的工具部署到DevPod,研发在DevPod上验证通过之后可以部署到集群上去,支持不同的语言。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读