更新时间:2024-12-18 GMT+08:00
分享

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。

表1 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 基本概念的逻辑关系

方案架构

本示例的操作步骤请参见图2表2

图2 操作流程图
表2 操作步骤

步骤

说明

关联镜像

在CCE Autopilot集群中部署Jenkins Master

  • 在CCE Autopilot集群中安装部署Jenkins Master,负责管理任务。
  • 浏览器通过负载均衡公网IP访问Jenkins Master。

Jenkins Master工作负载:本示例中使用jenkins/jenkins:lts镜像。

说明:

jenkins/jenkins:lts表示Jenkins LTS版本的Docker镜像。LTS版本是Jenkins官方提供的长期支持的版本镜像,相对稳定,并且会在更长时间内接受安全更新和bug修复,通常适用于需要稳定环境的生产系统,更多信息请参见LTS Release Line

在Jenkins界面中配置Jenkins Agent

  • 在Jenkins界面安装Kubernetes的插件。
  • 在Cloud中配置集群信息,用于连接集群。
  • 在Cloud中配置Pod Template,作为后续在集群中动态创建Agent Pod的模板。

Jenkins Agent工作负载需要使用3个镜像:

  • jenkins/inbound-agent:latest:用于连接Jenkins Agent和Jenkins Master,保证任务的连续执行。
  • maven:3.8.1-jdk-8:用于执行Pipeline中的打包任务。
  • gcr.io/kaniko-project/executor:v1.23.2-debug:用于在容器内构建和推送Docker镜像。

在Jenkins界面中构建并执行Pipeline

  • 在Jenkins界面编写Pipeline脚本,定义整个任务的自动化流程,并将任务编译成Jenkins Master能够理解的语言。
  • Jenkins Master负责协调整个流水线的执行过程,通过Kubernetes插件在集群中动态创建Jenkins Agent(Pod形式呈现),并将任务分发给Jenkins Agent处理。任务完成后,Jenkins Agent自动销毁。

在本示例中,Pipeline的任务内容是从代码仓中拉取代码,将代码打包成镜像,并推送到SWR镜像仓库中。

推送至SWR的镜像:tomcat。

相关文档