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、环境等几个步骤,可以作为工作的基础环节来进行使用。

应用

接下来就可以做几个善后工作

  1. jx 支持插件,可以通过jx get addons查看支持的插件列表,进行安装。
  2. 根据实际工作需要,对缺省环境进行调整,安装所需软件。
  3. 对 Jenkins X 中的软件、集群进行安全加固。
  4. 使用import或者create spring/create quickstart,进行项目工作。
  5. 最后要注意的一点是,Jenkins X 目前的升级频率非常高。不建议生产使用。