二、环境准备:安装Jenkins(War包、Docker、Kubernetes方式)、配置JDK与Maven、设置初始管理员与插件源
Jenkins作为持续集成与持续交付(CI/CD)的核心调度引擎,其安装质量直接决定了后续流水线构建的稳定性、可维护性与团队协作效率。本章将系统讲解三种主流安装方式(War包、Docker、Kubernetes)的适用场景与操作要点,并深入剖析JDK与Maven的配置规范、初始管理员的安全设置以及插件源加速策略。无论你是初次接触Jenkins的运维新手,还是正在规划企业级CI/CD平台的架构师,本章内容都将为你提供一套可落地、可验证的实践路径。
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 | 中小团队、快速交付 | 中大型团队、云原生环境 |
2.2 操作流程:从零到可用的Jenkins环境
无论选择哪种安装方式,后续的配置流程都遵循“安装→启动→解锁→配置→加固”的路径。以下以Docker方式为例展示完整操作流程,War包与Kubernetes方式的关键差异点会在步骤中标注。
- 环境预检:确认服务器内存不低于2GB(推荐4GB以上),磁盘剩余空间不低于10GB(用于存放构建产物和插件)。执行
java -version检查JDK是否已安装,Jenkins 2.361及以上版本要求JDK 11或17。 - 获取镜像并启动容器:使用官方镜像
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通过集群内部网络连接。
- 首次解锁:访问
http://<服务器IP>:8080,Jenkins会要求输入初始管理员密码。该密码存储在容器内的/var/jenkins_home/secrets/initialAdminPassword文件中,执行docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword获取。 - 插件安装策略:选择“安装推荐的插件”或“选择插件来安装”。推荐选择自定义安装,仅勾选必要插件(如Git、Pipeline、Docker Pipeline、Kubernetes),避免安装过多无用插件导致启动缓慢。
- 创建管理员账号:填写用户名、密码、邮箱,务必使用强密码(至少12位,包含大小写字母、数字和特殊字符)。此账号将拥有Jenkins全部管理权限。
- 实例配置:设置Jenkins URL,默认使用当前访问地址。若使用反向代理或域名访问,需在此处修改为最终对外地址。
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,防止大型项目构建时内存溢出。
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用户,Kubernetes方式应配置Pod的安全上下文(SecurityContext)限制权限。
2.5 案例拆解:从零搭建企业级Jenkins环境
某互联网电商企业需要搭建一套支持200人研发团队的CI/CD平台,要求高可用、可扩展、支持多环境部署。团队最终选择了Kubernetes方式,以下是完整的实施过程与复盘。
背景与约束:公司已有Kubernetes 1.28集群(3个Master节点,10个Worker节点),但运维团队对Jenkins经验不足;业务线包含Java、Node.js、Python三种技术栈;要求构建资源按需分配,高峰期支持50个并发构建。
实施步骤:
- 在Kubernetes集群中创建
jenkins命名空间,并配置RBAC权限,允许Jenkins主控创建和管理Pod。 - 使用Helm Chart部署Jenkins,设置持久化存储(StorageClass为SSD),配置Ingress域名
jenkins.internal.example.com。 - 在“系统管理→节点管理→Cloud”中配置Kubernetes云,指定集群地址、命名空间和镜像(
jenkins/inbound-agent:latest-jdk17)。 - 为不同技术栈创建对应的Pod模板:Java模板包含JDK17和Maven,Node.js模板包含Node 18和npm,Python模板包含Python 3.11。
- 配置插件源为阿里云镜像,并安装Kubernetes、Pipeline、Git、Docker Pipeline等核心插件。
结果与复盘:平台上线后,高峰期并发构建数达到45个,Pod平均创建时间约15秒,构建资源利用率提升60%。但初期也遇到两个问题:一是Pod内Maven依赖下载慢,通过在Pod模板中挂载共享的maven-repo卷解决;二是Jenkins主控单点故障,通过部署2个副本并配置共享存储解决。复盘经验:Kubernetes方式的核心收益是资源弹性,但必须提前规划好共享存储和镜像拉取策略,否则会成为瓶颈。