Jenkins Java 构建需手动配置 JDK/Maven 环境并显式声明版本,正确处理 settings.xml、权限、内存及安全传参,避免静默失败。
Java 项目用 Jenkins 做自动化构建,核心不是“能不能”,而是“怎么配才不踩坑”——尤其当你第一次在 Jenkinsfile 里写 sh 'mvn clean package' 却发现报错 Command 'mvn' not found 的时候。
Jenkins 节点上没装 JDK 和 Maven 怎么办
Jenkins 本身不自带 Java 构建环境,Slave/Agent 节点(包括默认的 master)必须手动配置 JDK 和 Maven 的安装路径,或者用工具自动管理。
- 推荐在
Manage Jenkins → Global Tool Configuration里添加 JDK 和 Maven:填名称(如jdk-17、maven-3.9.6),再指定实际安装路径或勾选 “Install automatically” - 在
Jenkinsfile中显式声明工具版本,避免用系统 PATH 里不可控的默认版本:pipeline { agent any tools { jdk 'jdk-17' maven 'maven-3.9.6' } stages { ... } } - 如果用 Docker Agent,直接在
Dockerfile或agent { docker { image 'maven:3.9-openjdk-17' } }里带环境,比宿主机配置更可靠
为什么 mvn clean package 在 Jenkins 里总失败
本地能跑 ≠ Jenkins 能跑,常见断点不在代码,而在上下文差异。
-
settings.xml缺失:Maven 默认只读$HOME/.m2/settings.xml,但 Jenkins 运行用户(如jenkins)的 HOME 下往往没配私服镜像或认证。解决方案:在 Jenkins 全局配置中上传私有settings.xml,并在 pipeline 中绑定:options { withMaven(maven: 'maven-3.9.6', mavenSettingsConfig: 'my-maven-settings-id') { ... } } - 权限问题:比如
target/目录被上一次构建残留且属 root,当前 jenkins 用户无权覆盖 —— 加sh 'rm -rf target'不如用clean阶段前加sh 'chmod -R u+rw .' - 内存溢出:Jenkins 默认 JVM 参数太保守,
mvn启动时可能 OOM。可在MAVEN_OPTS中显式加大:sh 'MAVEN_OPTS="-Xmx2g -XX:MaxMetaspaceSize=512m" mvn clean package'
Jenkinsfile 里怎么安全传参给 Maven
不要拼字符串传参,尤其涉及版本号、分支名、profile 等动态值,容易注入或空格截断。