4. Jenkins 安装与初始配置:安装方式(WAR/Docker/K8s)、初始解锁、插件安装建议、全局工具配置(JDK/Git/Maven/Node.js)

Jenkins 作为 CI/CD 流水线的核心调度引擎,其安装方式与初始配置直接影响后续流水线的稳定性与扩展性。本章将系统讲解三种主流安装方式、首次解锁流程、插件选型策略以及全局工具链配置,帮助你在不同基础设施场景下快速搭建可用的 Jenkins 环境。

4.1 安装方式对比与选型

根据团队规模、基础设施成熟度与运维能力,Jenkins 安装可分为以下三种模式:

安装方式 适用场景 优势 劣势
WAR 包部署 单机开发测试、小型团队 部署简单,依赖少,适合快速验证 扩展性差,高可用需额外配置
Docker 容器 标准化交付、中大型团队 环境一致,启动快,易于迁移 持久化数据需挂载卷,网络配置稍复杂
Kubernetes 部署 云原生、弹性伸缩、企业级 自动扩缩容,高可用,与 K8s 生态集成 运维门槛高,需熟悉 Helm/Operator
选型建议: 若团队处于初期探索阶段,优先使用 Docker 方式;若已有 K8s 集群且需要动态 Agent,直接采用 K8s 部署;WAR 包方式仅推荐用于本地开发或无法使用容器化的遗留环境。

4.1.1 WAR 包安装(快速入门)

  1. 下载最新稳定版 WAR 包:jenkins.war(官方镜像源或国内镜像)
  2. 确保已安装 JDK 11 或 JDK 17
  3. 启动命令:java -jar jenkins.war --httpPort=8080
  4. 访问 http://localhost:8080 进入解锁页面
# 示例:使用 JDK 17 启动 Jenkins
java -jar jenkins.war --httpPort=8080 --prefix=/jenkins

4.1.2 Docker 容器安装(推荐)

# 拉取官方 LTS 镜像
docker pull jenkins/jenkins:lts-jdk17

# 运行容器(挂载数据卷)
docker run -d \
  --name jenkins \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts-jdk17
注意: 务必挂载 jenkins_home 卷,否则容器重启后所有配置与作业将丢失。生产环境建议使用命名卷或 NFS 持久化存储。

4.1.3 Kubernetes 部署(企业级)

使用 Helm Chart 是最推荐的 K8s 部署方式,可一键完成 Jenkins Master 与动态 Agent 的配置:

# 添加 Jenkins Helm 仓库
helm repo add jenkins https://charts.jenkins.io
helm repo update

# 安装 Jenkins(自定义 values.yaml)
helm install jenkins jenkins/jenkins \
  --namespace jenkins \
  --create-namespace \
  -f values.yaml

以下为 K8s 部署 Jenkins 的核心架构示意:

Kubernetes 部署 Jenkins 架构 用户 / 浏览器 Ingress Jenkins Master PVC 持久卷 Agent Pod 1 Agent Pod 2 Agent Pod N 说明:Master 通过 K8s 插件动态创建/销毁 Agent Pod,实现弹性伸缩

4.2 初始解锁与插件安装

4.2.1 首次解锁流程

  1. 浏览器访问 Jenkins 地址,页面提示输入初始管理员密码
  2. 查看密码:docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
  3. 输入密码后进入“自定义 Jenkins”页面
  4. 选择“安装建议插件”或“选择插件来安装”
  5. 创建第一个管理员用户(建议使用强密码)
  6. 配置 Jenkins URL(默认使用当前访问地址)
关键路径: 解锁密码 → 插件安装 → 创建管理员 → 实例配置。此过程不可跳过,建议在安装插件时选择“建议插件”以快速获得基础能力。

4.2.2 插件安装建议(按优先级分组)

类别 插件名称 用途说明
核心必装 Pipeline、Credentials Binding、Git 流水线定义、凭据管理、代码拉取
代码仓库 GitHub Integration、GitLab、Bitbucket Webhook 触发、PR 构建、分支扫描
构建工具 Maven Integration、NodeJS、Gradle 自动安装对应工具版本,无需手动配置
容器与K8s Docker Pipeline、Kubernetes Docker 构建与推送、动态 Agent 管理
质量与通知 JUnit、HTML Publisher、Email Extension、Slack 测试报告、构建通知、结果归档
安全与权限 Role-based Authorization Strategy、LDAP 细粒度权限控制、企业用户集成
插件管理原则: 只安装必要的插件,避免冗余导致启动变慢或版本冲突。建议使用 plugins.txt 文件管理插件列表,便于版本化与重建。

4.3 全局工具配置

全局工具配置是 Jenkins 能够调用 JDK、Git、Maven、Node.js 等构建环境的前提。配置路径:Dashboard → Manage Jenkins → Tools。

4.3.1 JDK 配置

  • 自动安装: 选择“Install automatically”,从 adoptium.net 或 oracle 下载
  • 手动指定: 填写 JAVA_HOME 路径(适用于已预装 JDK 的 Agent)
  • 建议: 配置 JDK 11 和 JDK 17 两个版本,分别用于不同项目
# 手动配置示例(Linux Agent)
Name: JDK17
JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64

4.3.2 Git 配置

  • 通常无需自动安装,直接使用系统 Git(路径:/usr/bin/git)
  • 若 Agent 未预装 Git,可选择“Install from Apache”自动下载
  • 验证命令:git --version

4.3.3 Maven 配置

  • 自动安装: 选择版本(如 3.9.6),Jenkins 自动下载并缓存
  • 手动配置: 指定本地 MAVEN_HOME 路径
  • settings.xml: 可在“Managed files”中统一管理,避免每个项目重复配置
# 自动安装配置示例
Name: Maven-3.9
Install automatically: ✅
Version: 3.9.6

4.3.4 Node.js 配置

  • 安装 NodeJS 插件后,在 Tools 中新增 NodeJS 安装
  • 支持自动安装 LTS 版本(如 20.x)
  • 可同时配置 npm 全局包(如 yarn、pnpm)
# NodeJS 配置示例
Name: NodeJS-20
Install automatically: ✅
Version: NodeJS 20.11.0
Global npm packages: yarn pnpm

4.4 全局工具配置架构图

以下图示展示了 Jenkins 全局工具配置与 Pipeline 执行时的调用关系:

全局工具配置与 Pipeline 调用关系 Jenkins Master 全局工具配置 JDK 11 / JDK 17 Git Maven 3.9 Node.js 20 Gradle / Docker Pipeline 作业 Agent 节点 工具定义 编译 / 测试 / 打包 说明:Pipeline 通过 tool() 步骤引用全局工具,Jenkins 自动在 Agent 上安装或使用已配置路径

4.5 配置验证与常见问题

4.5.1 验证工具配置是否生效

创建一个简单的 Pipeline 作业,使用以下脚本验证各工具是否可被正确调用:

pipeline {
    agent any
    tools {
        jdk 'JDK17'
        maven 'Maven-3.9'
        nodejs 'NodeJS-20'
    }
    stages {
        stage('Verify Tools') {
            steps {
                sh 'java -version'
                sh 'git --version'
                sh 'mvn --version'
                sh 'node --version'
                sh 'npm --version'
            }
        }
    }
}
常见问题:
  • 工具未找到: 检查 Agent 节点是否安装了对应工具,或自动安装是否成功
  • 版本不匹配: 确保全局工具名称与 Pipeline 中 tool() 引用的名称完全一致
  • 权限不足: Jenkins 用户需对工具安装目录有读写权限

4.5.2 配置持久化与备份

全局工具配置存储在 JENKINS_HOME/config.xml 中,建议定期备份该文件。若使用 Docker 或 K8s 部署,确保 JENKINS_HOME 挂载到持久化存储,避免配置丢失。

最佳实践: 将全局工具配置纳入基础设施即代码(IaC)管理,使用 Jenkins Configuration as Code (JCasC) 插件以 YAML 文件定义所有工具配置,实现环境快速重建与版本控制。