跳转至

第一章:Jenkins 简介

什么是 Jenkins?

Jenkins 是一个开源的自动化服务器,用于自动化软件开发过程中的各种任务,包括构建、测试和部署。它是最广泛使用的 CI/CD 工具之一。

CI/CD 概念

持续集成(CI)

持续集成是一种开发实践,开发者频繁地将代码集成到主干分支。每次集成都通过自动化的构建和测试来验证,从而尽早发现集成错误。

CI 的核心实践: - 频繁提交代码 - 自动化构建 - 自动化测试 - 快速反馈

持续部署(CD)

持续部署是 CI 的延伸,将代码自动部署到生产环境。

CD 的核心实践: - 自动化部署流程 - 环境一致性 - 回滚机制 - 监控与告警

Jenkins 特点

1. 开源免费

Jenkins 是完全开源的,基于 MIT 许可证,可以免费使用和修改。

2. 插件生态

Jenkins 拥有超过 1800 个插件,支持各种工具和平台:

  • 版本控制:Git、SVN、Mercurial
  • 构建工具:Maven、Gradle、npm
  • 云平台:AWS、Azure、Kubernetes
  • 测试工具:JUnit、Selenium、SonarQube
  • 通知:Slack、Email、钉钉

3. 分布式构建

Jenkins 支持分布式构建,可以在多台机器上并行执行任务:

┌─────────────┐
│   Master    │
│  (调度器)    │
└──────┬──────┘
  ┌────┴────┬─────────┐
  │         │         │
┌─▼──┐   ┌──▼──┐   ┌──▼──┐
│Agent│   │Agent│   │Agent│
│Linux│   │Win  │   │Mac  │
└─────┘   └─────┘   └─────┘

4. Pipeline as Code

Jenkins Pipeline 使用 Groovy DSL 定义构建流程,实现版本控制的 CI/CD 流程:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'npm run build'
            }
        }
        stage('Test') {
            steps {
                sh 'npm test'
            }
        }
        stage('Deploy') {
            steps {
                sh 'npm run deploy'
            }
        }
    }
}

Jenkins 架构

Master-Agent 架构

┌─────────────────────────────────────┐
│           Jenkins Master            │
│  ┌─────────────────────────────┐   │
│  │      Web UI (8080)          │   │
│  └─────────────────────────────┘   │
│  ┌─────────────────────────────┐   │
│  │      Scheduler              │   │
│  └─────────────────────────────┘   │
│  ┌─────────────────────────────┐   │
│  │      Build Queue            │   │
│  └─────────────────────────────┘   │
└───────────────┬─────────────────────┘
       ┌────────┼────────┐
       │        │        │
   ┌───▼───┐ ┌──▼───┐ ┌──▼───┐
   │ Agent │ │Agent │ │Agent │
   │   1   │ │  2   │ │  3   │
   └───────┘ └──────┘ └──────┘

Master 职责: - 提供 Web UI - 管理配置和插件 - 调度构建任务 - 分发任务给 Agent

Agent 职责: - 执行具体的构建任务 - 报告构建状态

Jenkins vs 其他 CI/CD 工具

特性 Jenkins GitLab CI GitHub Actions CircleCI
开源 ✅ (部分)
自托管
插件生态 丰富 一般 一般 一般
配置复杂度 较高 中等
学习曲线 陡峭 中等 平缓 平缓
企业支持

适用场景

适合使用 Jenkins 的场景

  1. 企业级项目:需要高度定制化的 CI/CD 流程
  2. 多技术栈:支持 Java、Python、Node.js、Go 等多种语言
  3. 混合环境:需要同时支持 Linux、Windows、macOS 构建
  4. 合规要求:需要自托管、数据不出内网
  5. 复杂流程:需要复杂的构建、测试、部署流程

不太适合的场景

  1. 小型项目:配置复杂,维护成本高
  2. 云原生项目:GitHub Actions、GitLab CI 可能更合适
  3. 快速启动:需要快速搭建 CI/CD 的项目

学习路线

基础阶段
├── 安装部署
├── 基本配置
├── Job 创建
└── Pipeline 基础

进阶阶段
├── Pipeline 进阶
├── 多分支 Pipeline
├── 凭证管理
└── 触发器配置

高级阶段
├── 分布式构建
├── Shared Libraries
├── 安全配置
└── 性能优化

小结

本章介绍了 Jenkins 的基本概念和特点:

  • Jenkins 是最流行的开源 CI/CD 工具
  • 支持丰富的插件生态
  • 采用 Master-Agent 架构
  • 使用 Pipeline as Code 定义构建流程

下一章将介绍 Jenkins 的安装与配置。