初探Jenkins X
Jenkins 于 3月21日 发布了名为Jenkins X的项目,这一项目对开发人员和云端的 CI/CD 环境之间的交互过程进行了审视和反思,结合自动化、工具链以及 DevOps 最佳实践。为开发团队提供了新的生产效率增长点。
Jenkins X是什么?
“X”注定是一个不平凡的名字,Jenkins X 对于整个Jenkins生态而言也是不平凡的存在。
简而言之,Jenkins X 是一个高度集成化的CI/CD平台,基于Jenkins和Kubernetes实现,旨在解决微服务体系架构下的云原生应用的持续交付的问题,简化整个云原生应用的开发、运行和部署过程。
你猜的没错,Jenkins X 只能在Kubernetes集群上运行,这有并不意外。Kubernetes已然成为了容器编排的一枝独秀,各大厂商纷纷转向Kubernetes,发布了自己的公有云、操作系统或PaaS平台。
另外,微服务和云原生应用解决方案也日臻成熟,以Spring Boot为代表的一系列体系框架也开始走到舞台中央。
与此同时,随着应用架构的细分和服务间的解耦,服务具备了独立发布的能力,这也使得微服务架构下的持续交付成为业界所关注的热门领域,我们需要更加灵活的CI/CD自动化解决方案,以应对越发快速的交付需求。
注:Jenkins的企业版CloudBees,已经加入CNCF(云原生计算)基金会
看到这里,你是不是觉得Jenkins X 就是个基于Kubernetes的持续交付平台呢?
那你就大错特错了,因为Jenkins X想要实现的远非如此而已!
试想如下场景:
越来越多的工具和实践,工程师们需要会写Kubernetes YAML,Dockerfile,Jenkinsfile,对微服务、云原生、Kubernetes和Jenkins非常熟悉。
臣妾做不到呀!
而在Jenkins X的世界中,这一切都是通过命令完成。
可以说Jenkins X重新思考了未来云原生应用下研发工程师和CI/CD的交付方式,通过整合工具,自动化和DevOps最佳实践,改善了研发过程中的复杂环节,让研发可以专注于价值创造,其他的事情通通交给Jenkins X来帮你解决。
神奇吗?
的确,在第一次看到项目演示的时候,我也惊叹世界的变化如此之快,在Jenkins X的设计中,整合了Helm,Draft,GitOps,以及Nexus,chartmuseum,monocular等诸多新系统和工具,从而实现自动构建编译环境,生成容器镜像,流水线,自动化部署,并通过简单的Review实现不同环境间的自动发布。
这一切都被完美的封装在简单的jx命令之后。同时你也无需担心对内部实现细节的失控,因为一切都被妥善的版本控制,可以自定义和修改,可以说Jenkins X为你实现了自动化的CI/CD和DevOps最佳实践,持续交付不再是难事,进而提升生产力,实现促进企业的业务成功!
Jenkins X 部分新特性
1. 自动化一切:自动化CI/CD流水线
- 选择项目类型自动生成Jenkinsfile定义流水线
- 自动生成Dockerfile并打包容器镜像
- 自动创建Helm Chart并运行在Kubernetes集群
- 自动关联代码库和流水线,作为代码变更自动触发(基于Webhook实现)
- 自动版本号自动归档
2. Review代码一键部署应用:基于GitOps的环境部署
- 所有的环境,应用列表,版本,配置信息统一放在代码库中进行版本控制
- 通过Pull Request实现研发和运维的协同,完成应用部署升级(Promotion)
- 可自动部署和手动部署,在必要的时候增加手工Review
- 当然这些都封装在jx命令中实现
3. 自动生成预览环境和信息同步反馈
- 预览环境用于代码Review环节中临时创建
- 同Pull Request工作流程集成并实现信息同步和有效通知
- 验证完毕后自动清理
- 提交和应用状态自动同步到Github注释
- 自动生成release notes信息供验证
Jenkins X 核心组件
Jenkins
Jenkins X不是一个全新的Jenkins。
他依然使用Jenkins作为持续交付的核心引擎,实际上Jenkins X作为Jenkins的一个子项目存在,专注于云原生应用的CI/CD实现,同时也帮助Jenkins自身完成云原生应用的转型,毕竟现在越来越多的人在诟病单体应用的设计和文件存储系统。
在之前同Jenkins创始人和核心骨干的交流中,我们也了解到Jenkins已经开始着手改变。
HELM
Helm是用于管理Kubernetes资源对象的工具,类似APT,YUM和HOMEBREW,他通过将Kubernetes的资源对象打包成Chart的形式,完成复杂应用的部署和版本控制,是目前业界流行的解决方案
DRAFT
Draft是自动化应用构建和运行在Kubernetes上面的工具,具有语言识别能力,能够自动生成构建脚本,依赖,环境并打包成docker镜像并部署在Kubernetes集群上,加快代码开发节奏,而无需关心基础设施层面的技术实现
GitOps
GitOps是weaveworks推出的天才的应用部署解决方案,他将Git作为整个应用部署的单一可信数据源(SSOT),通过类似代码开发的Pull Request流程完成应用部署的Review和自动化实现,并且将部署配置信息纳入版本控制。
Jenkins X 安装试用
先决条件
工具
- helm
- kubectl
- git
Kubernetes 集群
- 互联网连接
- Tiller
- 公网 IP
github 账号
安装 jx
http://jenkins-x.io/getting-started/install/ 提供了几种系统下的安装说明:
- OS X:
brew tap jenkins-x/jx && brew tap jenkins-x/jx
- Linux:
curl -L https://github.com/jenkins-x/jx/releases/download/v1.1.10/jx-darwin-amd64.tar.gz | tar xzv && mv jx /usr/local/bin
jx install
jx create cluster
支持多种公有云的创建。
配置好集群和对应的 kubeconfig 访问之后,就可以使用jx install进行安装了。
过程中几个需要注意的点:
- 如果 Tiller 的 SA 权限不足,会导致安装失败,可设置相应的 ClusterRole 进行解决。
- 安装过程会修改 kubeconfig 文件,因此建议做好备份。
- 为完整体验功能,建议听从安装器建议,安装 Ingress Controller。
- Jenkins X 的环境管理以及代码拉取等功能需要和 Github 进行交互,因此会提问 GitHub 的 Token。
- 安装过程相对较长,可以使用
watch kubectl get pods -n jx
查看进程状况。 - 最后步骤会显示管理密码,注意复制保存。
安装完成
JX 会为用户建立三个环境分别是,Dev、Staging 以及 Production。
运行命令jx console
,会打开浏览器进入 Jenkins 登录页面。
登录之后我们会看到正在进行构建,如果是一个排队状态,可能是因为正在创建 Worker Pod,可以使用kubectl查询具体情况。
构建完成,会看到这一示例中包含了拉取、构建、Helm、环境等几个步骤,可以作为工作的基础环节来进行使用。
应用
接下来就可以做几个善后工作
- jx 支持插件,可以通过jx get addons查看支持的插件列表,进行安装。
- 根据实际工作需要,对缺省环境进行调整,安装所需软件。
- 对 Jenkins X 中的软件、集群进行安全加固。
- 使用import或者create spring/create quickstart,进行项目工作。
- 最后要注意的一点是,Jenkins X 目前的升级频率非常高。不建议生产使用。