CCE Autopilot集群部署Jenkins方案概述
Jenkins是一个开源的自动化服务器,广泛应用于持续集成(CI)和持续交付/部署(CD)。当您的代码库发生变更时,Jenkins可以帮助您自动构建、测试和部署应用程序,提高开发效率和产品质量。Jenkins可以在多种环境中进行部署,不同部署环境具有不同的优势,具体请参见表1。此外,Jenkins部署方案有两种:单节点部署和分布式部署。
- 单节点部署:Jenkins作为独立的实例运行,所有的构建和操作都在同一节点(Jenkins Master)上,即Jenkins Master既负责任务调度和系统管理,又负责执行具体的构建任务。所有任务都在同一节点上运行,容易导致系统资源的过度消耗,并且随着项目规模和构建任务的增多,单节点部署可能成为性能瓶颈。该部署方式主要适用于小型团队或个人开发环境。
- 分布式部署:Jenkins Master负责任务调度和系统管理,而Jenkins Agent负责执行具体的构建任务。Jenkins Master接受来自用户的构建请求,并将这些任务分发给可用的Jenkins Agent完成。每个Jenkins Agent可以独立配置,支持不同的操作系统和构建工具,从而提供灵活的构建环境和可扩展性。同时,管理与执行分开可以有效地提升系统性能和响应速度。该架构适用于大规模的生产环境,特别是当构建任务量较大或对并发构建有较高需求时。
本文以分布式部署为例,介绍如何在CCE Autopilot集群中部署并使用Jenkins。
维度 |
CCE Autopilot集群 |
CCE Standard/Turbo集群 |
虚拟机 |
物理机 |
---|---|---|---|---|
适用场景 |
自动化管理需求高、持续集成和持续交付的场景 |
大规模分布式环境、持续集成和持续交付的场景 |
中小型项目、多个团队或项目共享一台物理机的场景 |
对性能和硬件要求高,且资源需求相对稳定,不需要频繁扩展的场景 |
性能 |
较高 |
较高 |
较低 |
高 |
资源利用率 |
高 |
较高 |
较低 |
低 |
运维管理 |
简单 |
较简单 |
较复杂 |
复杂 |
可伸缩性 |
强,秒级弹性伸缩 |
较强,分钟级弹性伸缩 |
较差 |
差 |
可用性 |
高 |
高 |
较高 |
较低 |
隔离级别 |
较高 |
较低 |
较高 |
高 |
注意事项
Jenkins系统的维护由开发者自行负责,使用过程中CCE服务不对Jenkins系统提供额外维护与支持。
Jenkins的基本概念
- Master节点(Jenkins Master):是Jenkins系统的核心部分,负责管理和协调所有工作。可以将其理解为“管理者”,不直接执行构建任务,而是分配任务给其他“工人”(即Agent节点)。
Master节点提供Web界面供用户操作和查看任务进度,后续步骤中提到的Jenkins界面都是指Master节点的Web界面。
- Agent节点(Jenkins Agent):是Jenkins负责执行实际构建任务的Pod或机器,执行的是具体的工作任务。可以同时设置多个Agent节点,分担工作负载,提高任务的并行度和效率。
- 插件(Plugin):是扩展Jenkins功能的核心方式。Jenkins可以根据需求安装不同的插件来支持版本控制、构建工具和部署等功能。同时,插件可以帮助Jenkins集成不同的工具和技术,如Kubernetes、Git和Maven等。其中,Kubernetes插件是实现Jenkins与集群之间信息交互的关键。
- 流水线(Pipeline):是一个自动化的工作流程,把软件开发过程中的多个阶段(如构建、测试和部署等)串联在一起,确保每一个步骤都能按照一定的顺序和规则自动执行。通过Pipeline,您可以向Jenkins Master下发任务,并通过Pipeline脚本定义整个自动化流程,Jenkins Master根据脚本执行任务。
- 云(Cloud):用于配置各种云环境,如集群、容器和虚拟机等,可以灵活地使用外部云平台的计算资源,实现Jenkins Agent的动态管理。
图1 基本概念的逻辑关系
方案架构
步骤 |
说明 |
关联镜像 |
---|---|---|
|
Jenkins Master工作负载:本示例中使用jenkins/jenkins:lts镜像。
说明:
jenkins/jenkins:lts表示Jenkins LTS版本的Docker镜像。LTS版本是Jenkins官方提供的长期支持的版本镜像,相对稳定,并且会在更长时间内接受安全更新和bug修复,通常适用于需要稳定环境的生产系统,更多信息请参见LTS Release Line。 |
|
|
Jenkins Agent工作负载需要使用3个镜像:
|
|
在本示例中,Pipeline的任务内容是从代码仓中拉取代码,将代码打包成镜像,并推送到SWR镜像仓库中。 |
推送至SWR的镜像:tomcat。 |