二、环境准备:安装Jenkins(War包、Docker、Kubernetes方式)、配置JDK与Maven、设置初始管理员与插件源

Jenkins作为持续集成与持续交付(CI/CD)的核心调度引擎,其安装质量直接决定了后续流水线构建的稳定性、可维护性与团队协作效率。本章将系统讲解三种主流安装方式(War包、Docker、Kubernetes)的适用场景与操作要点,并深入剖析JDK与Maven的配置规范、初始管理员的安全设置以及插件源加速策略。无论你是初次接触Jenkins的运维新手,还是正在规划企业级CI/CD平台的架构师,本章内容都将为你提供一套可落地、可验证的实践路径。

Jenkins 环境准备核心链路与决策路径 War包方式 传统Servlet容器部署 Docker方式 容器化快速交付 Kubernetes方式 云原生弹性伸缩 Jenkins 主控节点 JDK 配置 版本选择与JAVA_HOME Maven 配置 settings.xml与镜像仓库 插件源加速 清华/阿里云镜像 初始管理员设置与安全加固 首次解锁、创建管理员、CSRF保护、Agent权限控制 可用的CICD流水线基础环境

2.1 三种安装方式的核心原理与选型判断

Jenkins的安装方式并非简单的“能跑就行”,不同方式对应着不同的运维模型、扩展能力和故障恢复策略。War包方式是将Jenkins作为Web应用部署在外部Servlet容器(如Tomcat、Jetty)中,这种方式最传统,适合已有Java应用服务器运维经验、需要与现有应用共享端口或依赖容器级JNDI数据源的团队。其核心原理是Jenkins的WAR文件本质上是一个自包含的Web应用,容器负责HTTP监听、线程池管理和生命周期控制。

Docker方式则将Jenkins主控封装为独立容器,通过镜像分层实现版本一致性,数据卷(Volume)用于持久化JENKINS_HOME目录。这种方式的最大优势是“一次构建,到处运行”,且升级回滚极为便捷——只需更换镜像标签并重启容器。但需要注意,容器内的Jenkins默认以jenkins用户运行(UID 1000),在挂载宿主机目录时需处理权限映射问题。

Kubernetes方式是云原生时代的推荐方案,其核心原理是Jenkins主控以Deployment形式运行,而构建代理(Agent)则通过Kubernetes插件动态创建Pod。每个构建任务可以申请独立的Pod作为执行环境,实现资源隔离和弹性伸缩。这种方式特别适合大规模并发构建、多团队共享集群的场景,但引入的运维复杂度也最高,需要团队具备Kubernetes基础。

对比维度 War包方式 Docker方式 Kubernetes方式
部署复杂度 中(需管理Tomcat) 低(一条docker run命令) 高(需K8s集群)
升级回滚 替换WAR文件 更换镜像标签 更新Deployment镜像
资源隔离 进程级隔离 容器级隔离 Pod级隔离(最强)
弹性伸缩 不支持 需手动扩展 自动按需创建Agent
适用场景 小型团队、已有Tomcat 中小团队、快速交付 中大型团队、云原生环境
选型建议:如果团队人数少于20人且没有容器化经验,优先选择Docker方式;如果公司已有Kubernetes平台且希望统一资源管理,直接采用Kubernetes方式;War包方式仅建议在遗留系统或安全合规要求必须使用特定Servlet容器的场景下使用。

2.2 操作流程:从零到可用的Jenkins环境

无论选择哪种安装方式,后续的配置流程都遵循“安装→启动→解锁→配置→加固”的路径。以下以Docker方式为例展示完整操作流程,War包与Kubernetes方式的关键差异点会在步骤中标注。

  1. 环境预检:确认服务器内存不低于2GB(推荐4GB以上),磁盘剩余空间不低于10GB(用于存放构建产物和插件)。执行java -version检查JDK是否已安装,Jenkins 2.361及以上版本要求JDK 11或17。
  2. 获取镜像并启动容器:使用官方镜像jenkins/jenkins:lts-jdk17,通过以下命令启动并映射端口与数据卷:
docker run -d --name jenkins \
  -p 8080:8080 -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --restart=always \
  jenkins/jenkins:lts-jdk17

其中50000端口用于Jenkins主控与Agent之间的JNLP通信,若使用Kubernetes方式则无需暴露此端口,Agent通过集群内部网络连接。

  1. 首次解锁:访问http://<服务器IP>:8080,Jenkins会要求输入初始管理员密码。该密码存储在容器内的/var/jenkins_home/secrets/initialAdminPassword文件中,执行docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword获取。
  2. 插件安装策略:选择“安装推荐的插件”或“选择插件来安装”。推荐选择自定义安装,仅勾选必要插件(如Git、Pipeline、Docker Pipeline、Kubernetes),避免安装过多无用插件导致启动缓慢。
  3. 创建管理员账号:填写用户名、密码、邮箱,务必使用强密码(至少12位,包含大小写字母、数字和特殊字符)。此账号将拥有Jenkins全部管理权限。
  4. 实例配置:设置Jenkins URL,默认使用当前访问地址。若使用反向代理或域名访问,需在此处修改为最终对外地址。
权限陷阱提醒:在Docker方式中,如果挂载了宿主机的docker.sock,容器内的Jenkins将获得宿主机Docker守护进程的完全控制权。这意味着任何能创建Pipeline的用户都可以通过Docker容器逃逸获取宿主机root权限。生产环境务必通过Docker组权限控制或使用DinD(Docker-in-Docker)方案隔离。

2.3 配置JDK与Maven:构建环境的基石

Jenkins本身运行需要JDK,而构建Java项目还需要额外的JDK和Maven。这里存在两个层面的配置:Jenkins运行时的JDK(由启动脚本或容器镜像决定)和构建任务使用的JDK/Maven(在Jenkins全局工具配置中定义)。

在“系统管理→全局工具配置”中,可以添加多个JDK和Maven版本。推荐使用“自动安装”功能,Jenkins会从官方源下载并解压,但国内网络访问Oracle或Apache下载源较慢,建议使用“手动安装”并填写服务器本地路径。例如,将JDK解压至/opt/jdk17,Maven解压至/opt/maven3.9,然后在配置中指定JAVA_HOME为/opt/jdk17。

Maven的settings.xml配置是另一个关键点。默认情况下,Maven会从中央仓库下载依赖,国内访问速度极慢。需要在settings.xml中配置阿里云镜像:

<mirrors>
  <mirror>
    <id>aliyunmaven</id>
    <mirrorOf>central</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
  </mirror>
</mirrors>

同时建议配置本地仓库路径为/opt/maven-repo,避免每次构建都从远程拉取依赖。在Jenkins的“全局工具配置”中,可以为Maven设置MAVEN_OPTS,例如-Xms512m -Xmx2048m,防止大型项目构建时内存溢出。

实战场景:某金融科技公司使用Jenkins构建微服务项目,包含约30个Maven模块。初始配置时未设置镜像仓库,每次构建需等待10分钟以上下载依赖。通过配置阿里云镜像并将本地仓库挂载至SSD磁盘,构建时间缩短至2分钟以内。同时,通过设置MAVEN_OPTS为-Xmx4096m,解决了多模块并行编译时的内存溢出问题。

2.4 设置初始管理员与插件源加速

初始管理员账号创建后,应立即进行安全加固。首先,在“系统管理→全局安全配置”中,确保“代理(Agent)”的TCP端口设置为“随机选取”或“固定”,并启用CSRF保护。其次,建议关闭“匿名用户可读”权限,避免未登录用户查看构建日志和配置信息。

插件源加速是提升Jenkins使用体验的重要环节。默认插件更新中心为https://updates.jenkins.io,国内访问不稳定。可以通过“系统管理→插件管理→高级”中修改“更新站点”为清华镜像:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

修改后点击“立即获取最新插件信息”,并重启Jenkins使配置生效。此外,对于企业内部环境,可以搭建私有的插件源服务器,将插件包提前下载至内网,实现离线安装。

配置项 推荐值 风险说明
管理员密码策略 至少12位混合字符 弱密码易被暴力破解
CSRF保护 启用 防止跨站请求伪造攻击
匿名用户权限 禁止所有操作 防止信息泄露
插件更新站点 清华/阿里云镜像 官方源国内访问慢
Agent TCP端口 随机选取 固定端口易被扫描
常见误区:很多初学者在安装完成后直接使用默认的“安装推荐插件”选项,导致安装了数十个用不到的插件,不仅拖慢启动速度,还增加了安全攻击面。建议始终选择“自定义安装”,按需勾选。另外,不要将Jenkins以root用户运行,Docker方式应使用官方镜像内置的jenkins用户,Kubernetes方式应配置Pod的安全上下文(SecurityContext)限制权限。

2.5 案例拆解:从零搭建企业级Jenkins环境

某互联网电商企业需要搭建一套支持200人研发团队的CI/CD平台,要求高可用、可扩展、支持多环境部署。团队最终选择了Kubernetes方式,以下是完整的实施过程与复盘。

背景与约束:公司已有Kubernetes 1.28集群(3个Master节点,10个Worker节点),但运维团队对Jenkins经验不足;业务线包含Java、Node.js、Python三种技术栈;要求构建资源按需分配,高峰期支持50个并发构建。

实施步骤:

  1. 在Kubernetes集群中创建jenkins命名空间,并配置RBAC权限,允许Jenkins主控创建和管理Pod。
  2. 使用Helm Chart部署Jenkins,设置持久化存储(StorageClass为SSD),配置Ingress域名jenkins.internal.example.com。
  3. 在“系统管理→节点管理→Cloud”中配置Kubernetes云,指定集群地址、命名空间和镜像(jenkins/inbound-agent:latest-jdk17)。
  4. 为不同技术栈创建对应的Pod模板:Java模板包含JDK17和Maven,Node.js模板包含Node 18和npm,Python模板包含Python 3.11。
  5. 配置插件源为阿里云镜像,并安装Kubernetes、Pipeline、Git、Docker Pipeline等核心插件。

结果与复盘:平台上线后,高峰期并发构建数达到45个,Pod平均创建时间约15秒,构建资源利用率提升60%。但初期也遇到两个问题:一是Pod内Maven依赖下载慢,通过在Pod模板中挂载共享的maven-repo卷解决;二是Jenkins主控单点故障,通过部署2个副本并配置共享存储解决。复盘经验:Kubernetes方式的核心收益是资源弹性,但必须提前规划好共享存储和镜像拉取策略,否则会成为瓶颈。

总结复盘:无论选择哪种安装方式,环境准备的核心目标都是“稳定、安全、可扩展”。建议在正式使用前,先搭建一个最小可用环境,验证JDK/Maven配置、插件源加速和权限控制是否生效,再逐步扩展功能。记住,Jenkins的安装只是起点,后续的流水线设计、凭证管理和日志监控才是持续交付的关键。