Jenkins 简介 #

Jenkins是目前最流行的开源自动化服务器,广泛应用于持续集成和持续部署领域。它帮助开发团队自动化构建、测试和部署流程,提高软件开发效率。

什么是CI/CD? #

在深入了解Jenkins之前,先理解CI/CD的核心概念:

持续集成 (CI) #

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

text
代码提交 → 自动构建 → 自动测试 → 结果反馈

CI的核心价值:

  • 尽早发现集成问题
  • 减少手动构建工作
  • 提高代码质量
  • 加快开发迭代速度

持续部署 (CD) #

持续部署是持续集成的延伸,将通过测试的代码自动部署到生产环境。

text
测试通过 → 自动部署 → 生产环境

CD的核心价值:

  • 自动化部署流程
  • 减少人为错误
  • 加快发布速度
  • 提高发布可靠性

Jenkins 发展历史 #

起源 #

text
2004年: Kohsuke Kawaguchi 创建 Hudson 项目
2011年: Oracle 收购 Sun,Hudson 社区分裂
2011年: Jenkins 从 Hudson 分离,成为独立项目
至今:   Jenkins 成为最流行的 CI/CD 工具之一

版本演进 #

版本 特性
Jenkins 1.x 传统Job配置,自由风格项目
Jenkins 2.x Pipeline as Code,更好的用户体验
Jenkins 2.x+ Declarative Pipeline,Blue Ocean UI

Jenkins 核心概念 #

Master(主节点) #

Jenkins主节点是核心服务器,负责:

  • 处理HTTP请求
  • 调度构建任务
  • 管理配置和插件
  • 提供Web界面

Agent(代理节点) #

代理节点执行实际的构建任务:

  • 接收Master分配的任务
  • 执行构建步骤
  • 返回构建结果

Job(任务) #

任务是Jenkins中的执行单元:

  • Freestyle Project:自由风格项目
  • Pipeline:流水线项目
  • Multi-configuration Project:多配置项目
  • Folder:文件夹组织

Build(构建) #

构建是任务的一次执行:

  • 包含执行日志
  • 保存构建产物
  • 记录构建状态

Executor(执行器) #

执行器是执行构建的线程:

  • 每个节点可以有多个执行器
  • 决定并发构建数量

Jenkins 架构 #

text
┌─────────────────────────────────────────────────────────────┐
│                     Jenkins Master                           │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐      │
│  │   Web UI     │  │   REST API   │  │     CLI      │      │
│  │  (用户界面)   │  │  (接口服务)   │  │  (命令行)    │      │
│  └──────────────┘  └──────────────┘  └──────────────┘      │
│                                                              │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                  核心组件                              │  │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐    │  │
│  │  │任务调度器│ │执行队列 │ │安全框架 │ │插件管理 │    │  │
│  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘    │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                  执行器 (Executors)                    │  │
│  │  ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐                │  │
│  │  │ #1   │ │ #2   │ │ #3   │ │ #4   │                │  │
│  │  └──────┘ └──────┘ └──────┘ └──────┘                │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                  数据存储                              │  │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐                │  │
│  │  │ 配置文件 │ │ 构建日志 │ │ 插件数据 │                │  │
│  │  └─────────┘ └─────────┘ └─────────┘                │  │
│  └──────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘
                            │
              ┌─────────────┼─────────────┐
              ▼             ▼             ▼
        ┌──────────┐  ┌──────────┐  ┌──────────┐
        │  Agent 1 │  │  Agent 2 │  │  Agent 3 │
        │  (Linux) │  │(Windows) │  │  (macOS) │
        │          │  │          │  │          │
        │ ┌──────┐ │  │ ┌──────┐ │  │ ┌──────┐ │
        │ │Exec 1│ │  │ │Exec 1│ │  │ │Exec 1│ │
        │ │Exec 2│ │  │ │Exec 2│ │  │ │Exec 2│ │
        │ └──────┘ │  │ └──────┘ │  │ └──────┘ │
        └──────────┘  └──────────┘  └──────────┘

Jenkins 的优势 #

1. 开源免费 #

groovy
// 完全开源,可自由使用和修改
// 社区活跃,持续更新迭代

2. 丰富的插件生态 #

Jenkins拥有1800+插件,支持:

类别 示例插件
版本控制 Git, SVN, Mercurial
构建工具 Maven, Gradle, npm
云平台 AWS, Azure, Kubernetes
通知 Email, Slack,钉钉
代码质量 SonarQube, Checkstyle

3. 流水线即代码 #

groovy
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building...'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying...'
            }
        }
    }
}

4. 分布式构建 #

groovy
pipeline {
    agent {
        label 'linux-node'
    }
    stages {
        stage('Build') {
            steps {
                sh 'make build'
            }
        }
    }
}

5. 跨平台支持 #

平台 支持方式
Linux 原生支持,推荐生产环境
Windows Windows Service安装
macOS 支持开发测试环境
Docker 官方Docker镜像
Kubernetes Helm Chart部署

应用场景 #

1. 持续集成 #

groovy
pipeline {
    agent any
    tools {
        maven 'Maven 3.8'
        jdk 'JDK 11'
    }
    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }
        stage('Build') {
            steps {
                sh 'mvn clean compile'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
            post {
                always {
                    junit '**/target/surefire-reports/*.xml'
                }
            }
        }
    }
}

2. 持续部署 #

groovy
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'docker build -t myapp:${BUILD_NUMBER} .'
            }
        }
        stage('Push') {
            steps {
                sh 'docker push myapp:${BUILD_NUMBER}'
            }
        }
        stage('Deploy') {
            steps {
                sh 'kubectl set image deployment/myapp myapp=myapp:${BUILD_NUMBER}'
            }
        }
    }
}

3. 自动化测试 #

groovy
pipeline {
    agent any
    stages {
        stage('Unit Tests') {
            steps {
                sh 'npm test'
            }
        }
        stage('Integration Tests') {
            steps {
                sh 'npm run test:integration'
            }
        }
        stage('E2E Tests') {
            steps {
                sh 'npm run test:e2e'
            }
        }
    }
}

4. 定时任务 #

groovy
pipeline {
    agent any
    triggers {
        cron('H 2 * * *')
    }
    stages {
        stage('Nightly Build') {
            steps {
                echo 'Running nightly build...'
            }
        }
    }
}

Jenkins vs 其他CI/CD工具 #

特性 Jenkins GitHub Actions GitLab CI CircleCI
部署方式 自托管 云托管 云/自托管 云托管
配置语言 Groovy/YAML YAML YAML YAML
插件生态 1800+ 中等 中等 有限
学习曲线 较高
免费使用 完全免费 有限额度 有限额度 有限额度
企业支持 CloudBees GitHub GitLab CircleCI
分布式构建 原生支持 支持 支持 支持
容器支持 Docker插件 原生 原生 原生

何时选择Jenkins? #

适合场景 #

  • 需要完全控制CI/CD环境
  • 复杂的构建流程和自定义需求
  • 需要丰富的插件支持
  • 企业内部部署要求
  • 需要分布式构建能力

不太适合场景 #

  • 小型团队,简单项目
  • 希望快速上手,不想维护服务器
  • 预算有限,无法投入运维资源

下一步学习 #

现在你已经了解了Jenkins的基本概念,接下来可以:

  1. Jenkins安装与配置 - 搭建Jenkins环境
  2. 第一个任务 - 创建你的第一个Job
  3. 界面与导航 - 熟悉Jenkins界面

小结 #

  • Jenkins是最流行的开源CI/CD工具
  • 支持持续集成和持续部署
  • 拥有丰富的插件生态系统
  • 支持Pipeline as Code
  • 适合各种规模的项目和团队
最后更新:2026-03-28