相较于易捷版,DevOps 工程是高级版独有的功能,针对企业实际的快速迭代和快速交付业务需求和场景,可以发现很多企业和 IT 团队都有持续集成和持续交付的需求。DevOps 工程提供 Jenkinsfile in & out of SCM 两种模式,从仓库 (SVN/Git/GitHub)、代码编译、镜像制作、镜像安全、推送到仓库、应用版本、到定时构建的端到端流水线设置,支持用户在开发、测试等环境下的端到端高效流水线能力,支持用户成员管理,同时提供完整的日志功能,记录 CI/CD 流水线的每个过程。
KubeSphere 高级版 v1.0.0 提供的 DevOps 具有以下功能:
- 开箱即用的 DevOps 功能,无需对 Jenkins 进行复杂的插件配置;
- 独立 DevOps 工程,提供访问可控、安全隔离的 CI/CD 操作空间;
- 兼容 Jenkinsfile in & out of SCM (Source Code Management) 两种模式;
- 可视化流水线编辑工具,降低 CI/CD 学习成本;
- 使用 KubeSphere 基于 Kubernetes 提供弹性、干净、可定制的构建环境。
KubeSphere 高级版下一个版本 v2.0.0 将增加如下新的功能:
- 支持 Source to Image (S2I),快速交付容器镜像;
理解 KubeSphere DevOps
KubeSphere 的 DevOps 工程目前支持 GitHub、Git 和 SVN 这一类源代码管理工具,提供可视化的 CI/CD 流水线构建,或基于代码仓库已有的 Jenkinfile 构建流水线。
- Master 一旦发生单点故障,那么整个 CI/CD 流水线就崩溃了;
- 资源分配不均衡,有的 Slave 要运行的 job 出现排队等待,而有的 Slave 处于空闲状态;
- 不同的 Slave 的配置环境可能不一样,需要完成不同语言的编译打包,这类差异化的配置进一步导致管理不便,维护起来也不是一件易事。
KubeSphere 的 CI/CD 是基于底层 Kubernetes 的动态 Jenkins Slave,也就是说 Jenkins Slave 具有动态伸缩的能力,能够根据任务的执行状态进行动态创建或自动注销释放资源。实际上,Jenkins Master 和 Jenkins Slave 以 Pod 形式运行在 KubeSphere 集群的 Node 上,Master 运行在其中一个节点,并且将其配置数据存储到一个 Volume 中,Slave 运行在各个节点上,并且它不是一直处于运行状态,它会按照需求动态的创建并自动删除。
上述的工作流程可以理解为:当 Jenkins Master 接受到 Build 请求时,会根据配置的 Label 动态创建运行在 Pod 中的 Jenkins Slave 并注册到 Master 上,当这些 Slave 运行完任务后,就会被注销,并且相关的 Pod 也会自动删除,恢复到最初状态。
所以,这种动态的 Jenkins Slave 优势就显而易见了:
- 动态伸缩,合理使用资源,每次运行任务时,会自动创建一个 Jenkins Slave,任务完成后,Slave 自动注销并删除容器,资源自动释放,而且 KubeSphere 会根据每个资源的使用情况,动态分配 Slave 到空闲的节点上创建,降低出现因某节点资源利用率高,还排队等待在该节点的情况;
- 扩展性好,当 KubeSphere 集群的资源严重不足而导致任务排队等待时,可以很容易的添加一个 KubeSphere Node 到集群中,从而实现扩展;
- 高可用,当 Jenkins Master 出现故障时,KubeSphere 会自动创建一个新的 Jenkins Master 容器,并且将 Volume 分配给新创建的容器,保证数据不丢失,从而达到集群服务高可用。
我们提供了两个具有代表性的示例和文档,帮助您快速上手 CI/CD。
本示例以文档和视频演示如何基于 ,以可视化的方式构建 CI/CD 流水线 (包含示例一的前六个阶段),最终将本文档网站部署到 KubeSphere 集群中的开发环境且能够通过公网访问。
Jenkins Agent 说明
在 DevOps 工程中,KubeSphere 使用 Kubernetes Jenkins Agent 来执行具体的构建。Agent 部分指定整个 Pipeline 或特定阶段将在 Jenkins 环境中执行的位置,具体取决于该 Agent 部分的放置位置。该部分必须在 Pipeline 块内的顶层或 Stage 内部定义,详见 。
在创建 Jenkinsfile in SCM 这类流水线时,可参考 添加代码仓库 选择添加 Git 或 SVN 这类代码仓库。
设置自动触发扫描
在构建已有 SCM (Source Code Management) 的流水线中,用户如果需要为流水线设置自动发现远程分支的变化,以生成新的流水线并使其自动地重新运行,可参考 设置自动触发扫描。
流水线常见问题
本篇文档总结了流水线运行可能遇到的问题以及如何排错,详见 流水线常见问题。