Jenkins X 一瞥
推出 Blue Ocean 之后,Jenkins 似乎沉默了很久,终于在 3.21 发布了名为Jenkins X
的项目,这一项目对开发人员和云端的 CI/CD 环境之间的交互过程进行了审视和反思,结合自动化、工具链以及 DevOps 最佳实践。为开发团队提供了新的生产效率增长点。
项目动机
- 作为一种发布形式,容器镜像因其精简、高效、低成本以及易用性等诸多好处,已经超越虚拟机成为首选的分发手段。
- Kubernetes 成功的跨越各种平台、公有云的藩篱,成为容器云的标准,成为软件分发、安装和管理的工业标准的坚实基础。
- 微服务和云原生应用成为主流,日益增长,需要有相对应的 CI/CD 提供支撑。
平台亮点
Jenkins X 解决的不仅仅是安装问题,其中还带有在云原生应用 CI/CD 平台方面的最佳实践。
强大的命令行工具
新的命令行工具jx
,支持 OSX、Linux 平台,用接近 50 个命令,为用户提供了从集群安装、环境管理一直到应用发布的整个大环节的支持。甚至还贴心的提供了支持 Bash 以及 zsh 的自动完成能力。
列举几个有意思的命令:
-
jx create cluster
:创建 Kubernetes 集群。 -
jx install
:在 Kubernetes 上安装 Jenkins X。 -
jx create spring
:创建 Spring boot 应用。 -
jx promote
:将应用的制定版本升级到某环境。
完整的工具链整合
包括 Maven、Docker Registry、Monocular、CharMuseum 等工具的直接整合,并且内置了众多插件,各个服务之间的调用关系也已经设置完毕。常用的 Slave 构建、Mvn 构建、Git WebHook 等功能都会根据要求自动完成。
环境和 GitOps 支持
Jenkins X 将 Git 仓库、Kubernetes 命名空间、升级策略等内容结合在一起,成为了一个环境的定义,并且同 Github flow 结合在一起,让工作流程和环境切换有机结合,在工具链整合之外,又提供了工作流整合的完善支持。
例如 JX 的预览功能,在收到 Pull Request 时候,会根据这一请求构建镜像,并发布到用于预览的命名空间,同时还会在这一 Request 中注明预览环境就绪等待测试。
安装一下
先决条件
- 工具
- 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 目前的升级频率非常高。不建议生产使用。
- WordPress 中八个有用的代码片段
- 【释疑文】DeveMobile、EaseMobile 及Devework 主题的区别
- DeveMobile/EaseMobile 主题双双更新1.1,增加离线存储,社交媒体关注等功能
- Angularjs基础(六)
- 如果机器人拥有痛觉,这个世界会怎样
- 阻止iOS Web APP中点击链接跳转到Safari 浏览器新标签页
- 专门攻击工资支付系统的网络犯罪
- Angularjs基础(五)
- DW Replace Open Sans:将WordPress 后台中的open-sans字体加载源从Google Fonts换为360 CDN
- Google Fonts 已可正常访问,相关插件可卸
- 微信支付宝完成这几个设置,别人偷不走你一毛钱!
- Angularjs基础(四)
- Google Fonts导致WordPress 速度问题的三个解决方案
- DW Replace Open Sans:将WordPress 后台中的open-sans字体加载源从Google Fonts换为360 CDN
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【TBase开源版测评】体验安装
- 【Golang】go get遇到git fetch-pack: expected shallow list
- 聊聊dubbo-go的DefaultHealthChecker
- Java后端面试学习知识总结
- Spring框架源码脉络分析(一):IoC与容器、Bean和BeanDefinition
- Spring-Data-Redis 2.X以上版本使用心得和一些坑
- Java后端面试学习知识总结——数据库:MySQL
- Java 记一次自定义比较器中compareTo方法使用long强转int作为比较结果产生的bug
- SpringCloud 使用feign报错
- Java 使用Runtime在一个Java程序中启动和关闭另一个Java程序
- 解决虚拟机Centos7 报错 curl#56
- Java 桶排序实现 如何判断该放到哪个桶里
- Java selenium使用ChromeDriver截图 解决get超时后续任务报错问题
- 冒泡排序-排序算法
- Java中JDBC工具类封装