尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Jenkins配置指南:JDK、Maven、Git插件安装与构建验证

Jenkins配置指南:JDK、Maven、Git插件安装与构建验证 安装Jenkins本身不算难真正容易卡住的是插件装完之后那几步全局配置里的JDK、Maven、Git到底怎么填填错了构建就开始报各种奇怪错误。下面直接按实际落地顺序来拆一套完整配置流程内容包括插件安装、JDK、Maven、Git三件套的路径配置、命令行验证、Jenkins侧配置以及最小构建验证。适合正在搭Jenkins自动化部署的读者。如果以前只在Jenkins里点过“安装推荐的插件”后面大概率会遇到三类典型问题第一插件装了但入口找不到第二全局工具路径填错构建时提示找不到JDK或mvn第三Git仓库拉不下来一直卡在凭据或Host key上。这些问题都不算复杂但排查顺序一旦搞反会浪费很多时间。1. 先把插件装对在线、离线、镜像加速与入口差异插件没装好后面所有全局配置都像是在盲配。所以第一步不是去填JDK路径而是先确认插件列表里到底有哪些东西。1.1 在线安装插件前先确认两个前提在线安装插件是最常见的方式。进入“系统管理 - 插件管理”在“可选插件”里搜索名字点安装即可。但这一步有两个前置条件容易忽略。第一个是 Jenkins 服务器能访问插件更新站点。很多内网机器平时跑构建没问题但没开外网权限结果插件列表一直加载不出来或者搜索报超时。遇到这种情况不要反复点搜索先确认服务器到底能不能访问http://updates.jenkins.io或对应的镜像地址。第二个是插件版本要和 Jenkins 版本兼容。搜到插件之后页面通常会显示推荐版本但有时候插件版本过新Jenkins 本身太旧安装后会导致系统页面报错甚至插件列表打不开。如果机器上的 Jenkins 版本比较老我一般会先看插件要求的 Jenkins 最低版本再决定装不装。在线安装时如果出现Unable to find valid certification path to requested target这类报错不要急着跳过证书验证。这个问题的本质是 Java 的证书库没有信任插件更新站点的 HTTPS 证书。可以升级 Jenkins 运行时的 JDK也可以把插件更新站点换成证书正常的镜像地址。具体走哪条路要看你的 Jenkins 版本和系统 Java 版本不能一概而论。1.2 网络不稳定时改镜像源或离线上传如果默认更新站点下载慢可以在插件管理的高级设置里修改 Update Site URL换成国内镜像源。改完之后回到“可选插件”再搜索一般会重新拉取插件列表。这里要注意一点镜像源同步有延迟不是所有插件都能第一时间拿到最新版本。如果只是想要稳定可用的版本镜像源通常够用如果必须安装某个刚发布的新插件那就要确认镜像源是否已经同步到对应版本。还有一种更可控的方式是离线安装。提前下载好.hpi文件在“插件管理 - 高级”里选择文件上传。上传之后Jenkins 会解析这个插件如果它依赖其他插件而当前系统里没装就会直接提示依赖缺失。所以离线安装不能只盯着目标插件还要把它的依赖一起准备好。比如装 Maven Integration 之前先确认 Git、Credentials、Plain Credentials 这些基础插件已经存在。否则上传后看到的不是安装成功而是一串“依赖不足”的报错。1.3 装完插件后先重启不是必须但确认入口是必须新版 Jenkins 对很多插件支持动态加载安装完成后不重启也能用。但有些插件仍然要求重启 Jenkins 才能生效尤其涉及到全局配置、构建步骤扩展、安全设置这类模块。为了少踩坑我一般会装完插件后手动重启一次。重启完先去“已安装插件”里确认状态再去“系统管理”里看菜单有没有出现新入口。很多人说“插件装了但找不到”大部分情况是没重启或者插件安装过程实际失败了。如果你想让 Jenkins 界面切换成中文可以安装Localization: Chinese (Simplified)语言包。装好后在用户设置或“外观”相关选项里切换语言有些旧版本需要重启才能完全生效。这个插件本身不复杂但常常被忽略不是装完中文包就立刻全部汉化需要确认当前用户语言设置选成了中文。还有一个建议第一次搭建环境时插件不要贪多。只装实际用到的功能能避免很多依赖冲突。比如你要做 Maven 项目就装 Maven Integration、Git、Pipeline、Credentials 这些不需要的功能模块可以先不装。插件越多后续升级和排错的时间成本越高。2. JDK全局配置别只依赖PATH手动路径更可控JDK 配置是整个环节里最容易误解的一步。很多人以为系统里java -version能输出Jenkins 就一定能用。实际上Jenkins 自身运行的 JDK 和项目构建使用的 JDK 可能是两套分开配置才是稳妥做法。2.1 Jenkins自身需要的JDK和项目构建需要的JDK可能是两套Jenkins 本身是 Java 应用启动它需要一个 JDK 或 JRE。这个 JDK 会在 Jenkins 进程启动时加载影响 Jenkins 自身的功能。但项目构建时Maven 需要另一个 JDK这个 JDK 可能是完全不同的版本。常见场景是Jenkins 跑在 Java 17 上但项目是老项目要求 Java 8。这时候如果你只在系统环境变量里配了一个JAVA_HOME那么 Jenkins 自身可能启动正常但 Maven 构建时也会去用同一个 JAVA_HOME结果编译直接失败日志里出现版本不兼容或invalid target release。所以不要试图用一个 PATH 解决所有问题。更稳的做法是Jenkins 启动脚本单独指定一个 JDKJenkins 的“工具”配置里再按需添加多个 JDK 路径。这样 Jenkins 进程、项目 A、项目 B 可以各用各的版本互不影响。不同 Jenkins 版本对 JDK 的兼容范围不一样有的新版本要求 Java 11 或 17有的老版本只能跑在 Java 8 上。落地时要先看 Jenkins 的官方说明不要只看本机当前 Java 版本。如果 Jenkins 启动时日志报 Java 版本不支持优先处理 Jenkins 运行时的 JDK而不是项目构建的 JDK。2.2 在Jenkins“工具”里配置JDK的两种方式新版 Jenkins 中配置 JDK 的位置在“系统管理 - Tools”里面有“JDK”区域。点击“Add JDK”后有两种配置方式。第一种是勾选“Install automatically”。Jenkins 会按照你选择的 JDK 版本在构建节点上下载并安装。这种方式适合网络好、节点统一的环境但有一个明显缺点每个新节点第一次执行构建时都要现场下载 JDK耗时较长而且下载源如果不稳定构建会失败。第二种是不勾选自动安装手动填写JAVA_HOME路径。比如 Linux 下填/usr/lib/jvm/java-17-openjdk-amd64Windows 下填C:\Program Files\Java\jdk-17。我建议内网环境优先用这种方式因为路径可控、版本可控不需要每个节点都联网下载。填写路径时有一个高频错误把路径填到了 bin 目录或者路径末尾加了多余的斜杠。JAVA_HOME需要指向 JDK 的根目录不是bin子目录。填错之后Jenkins 可能启动不报错但 Maven 构建时会提示找不到javac或java可执行文件。2.3 多个JDK共存时怎么指定版本如果机器上有 JDK 8 和 JDK 17在 Tools 里分别添加两个 JDK一个命名为JDK8一个命名为JDK17。自由风格项目里可以在构建步骤中选择使用哪个 JDKPipeline 里可以用tools { jdk JDK17 }声明。这里最容易踩坑的点是Tools 里的名称大小写写错或者名称里带空格到了 Pipeline 里怎么都对不上。Jenkins 报错信息一般是No such tool named ...很多人以为是 Pipeline 语法问题实际上是名称不一致。配置完 JDK 后用java -version验证一次终端输出。再去 Jenkins 的“系统信息”页面查看进程实际使用的 Java Home确认 Jenkins 进程用的是哪个版本。如果两边不一致优先调整 Jenkins 启动脚本中的JAVA_HOME而不是去改项目构建的 JDK 路径。3. Maven全局配置settings.xml、本地仓库和Jenkins工具链Maven 是最常被 Jenkins 调用的构建工具。全局配置时很多人只填了一个 Maven 安装路径然后发现依赖下载慢、仓库路径不对、构建时找不到 JDK问题一个接一个。3.1 Maven安装完成后先验证mvn命令Maven 的安装方式不复杂下载二进制包、解压到固定目录、配置MAVEN_HOME和PATH。比如 Linux 下放到/opt/mavenWindows 下放到D:\tools\maven。配置完环境变量后新开一个终端执行mvn -v看到版本号只算第一步。真正要关注的是输出里的 Java 版本。如果mvn -v显示的 Java 版本和项目要求的不一致那后面在 Jenkins 里构建时大概率也会出问题。Maven 执行时会去找JAVA_HOME如果系统里没有设置它可能会自动探测当前 PATH 下的 Java如果 Jenkins 构建时又指定了另一个 JDK那 Maven 实际用的版本可能会和命令行里看到的不一样。所以命令行验证只是确认 Maven 本身可用不能完全代表 Jenkins 构建结果。在 Linux 环境里可以用which mvn查看 Maven 可执行文件路径。如果mvn命令只在某个用户下可用说明该用户的 PATH 配置正确但 Jenkins 进程使用的用户可能是另一个。这时候就要靠 Tools 里的 Maven 路径配置来兜底。3.2 Jenkins里配置Maven自动安装还是手动安装在“系统管理 - Tools”里找到“Maven”区域点击“Add Maven”。同样有自动安装和手动安装两种方式。自动安装会让 Jenkins 从配置的源下载 Maven 到 Jenkins 家目录适合节点网络好且不关心 Maven 版本细节的场景。但我建议在多数生产环境里用手动安装原因主要有两个第一Maven 的settings.xml可以直接放在安装目录下全局生效第二本地仓库路径、镜像地址可以提前配好不需要每次构建时都走默认下载。手动安装时需要填写MAVEN_HOME或 Maven 可执行文件的路径。和 JDK 一样路径要指向 Maven 根目录而不是bin目录。如果你填的是D:\tools\maven\binJenkins 可能仍然能识别但后续扩展设置容易出现路径拼接问题。Maven 的settings.xml需要关注两个位置MAVEN_HOME/conf/settings.xml是全局配置~/.m2/settings.xml是用户级配置。Jenkins 执行构建时使用的用户不一定是登录用户所以如果你把配置写在某个用户的家目录下Jenkins 不一定能读到。稳妥的做法是把本地仓库、镜像、私服信息放在全局settings.xml里然后在 Jenkins 里用命令行参数显式指定。比如mvn clean package -s /opt/maven/conf/settings.xml这个参数可以放在 Jenkins 构建步骤的 Goals 字段里也可以放在MAVEN_OPTS环境变量里。如果公司有私有仓库settings.xml 里的 mirror 配置要特别注意权限不要用明文密码写死在配置里尽量使用凭据管理或部署工具统一管理避免泄露。3.3 构建时找不到mvn或JDK的排查思路构建日志里常见的 Maven 相关报错有几种Cannot run program mvn说明 Jenkins 进程环境里找不到 mvn 命令。先检查 Tools 里 Maven 路径是否填写正确再检查节点目录是否存在。No compiler is provided in this environment说明 Maven 找到了但 JDK 环境不对。通常是 Tools 里没有为 Maven 指定 JDK或者指定的 JDK 路径无效。依赖下载一直超时说明镜像或网络配置有问题。先在构建日志里看依赖下载 URL是不是走了预期的镜像地址。排查顺序我一般这样走先看 Jenkins 控制台输出的完整日志确认 Maven 和 JDK 的实际路径再去 Tools 里检查路径是否有效最后在命令行手动执行mvn clean package看能不能成功。如果命令行能成功Jenkins 里失败多半是用户、路径或环境变量问题而不是代码问题。不要一上来就改 pom.xml。大多数 Maven 构建失败不是代码问题而是本地仓库、镜像或 JDK 版本问题。先让命令行和 Jenkins 用同一个用户、同一份 settings.xml 跑一遍对比差异会快很多。4. Git全局配置拉代码失败的常见原因都在这Git 配置相对简单但却是构建失败率最高的环节。很多时候代码明明在本地能克隆到了 Jenkins 里却一直卡在认证或主机验证上。4.1 Git安装完成之后首先生成密钥首先要确保 Jenkins 服务器上能执行git --version。Linux 用包管理器安装Windows 安装 Git 时建议选择“Git from the command line and also from 3rd-party software”让 git 命令进入 PATH。如果通过 SSH 拉取私有仓库需要在 Jenkins 服务器上生成 SSH 密钥ssh-keygen -t ed25519 -C jenkinsexample.com一路回车后会生成公钥~/.ssh/id_ed25519.pub和私钥~/.ssh/id_ed25519。把公钥内容添加到代码平台的 SSH Keys 设置里私钥留在 Jenkins 服务器上也可以导入 Jenkins 凭据供构建任务使用。这里不建议在生产环境直接关闭StrictHostKeyChecking。更稳妥的做法是把代码平台服务器的公钥提前写入known_hosts。你可以在 Jenkins 用户下手动执行一次git ls-remote或者ssh-keyscan把主机公钥记录下来避免 Jenkins 构建时因为无法交互而失败。如果你不确定 SSH 通不通先执行ssh -T git你的代码平台地址能收到欢迎信息说明认证已经通了。再回到 Jenkins 里配置。4.2 在Jenkins里添加Git凭据和全局配置Jenkins 里和 Git 相关的配置分两层。第一层是全局工具配置。在“系统管理 - Tools”里找到“Git”区域填写 git 可执行文件路径。Linux 通常是/usr/bin/gitWindows 通常是C:\Program Files\Git\bin\git.exe。如果这个路径没填Git 插件构建时会报git: command not found。第二层是凭据配置。在“系统管理 - 凭据 - 系统 - 全局凭据”里添加代码仓库的认证信息。支持用户名密码、SSH 密钥等方式。我常用的方式是用私有 SSH 密钥因为服务器本身已经有密钥对凭据里只需要把私钥粘贴进去命名一个容易识别的 ID比如jenkins-git-cred。凭据添加完成后构建任务里要主动选择这个凭据。很多人以为配了一次全局凭据就所有任务都能自动使用实际上不是。自由风格项目里源码管理选 GitURL 填仓库地址下面 Credentials 下拉框里选择你刚添加的凭据Pipeline 里则要在git步骤中指定credentialsId。如果仓库分支很多不需要每次构建都拉全部分支时可以考虑不勾选“Lightweight checkout”。但也要特别注意部分场景下浅克隆或过滤分支会影响构建脚本里的标签读取不是所有项目都适合。4.3 Git clone失败的几类现象与排查顺序Git 拉代码失败时现象不同排查方向也不同。Failed to connect to github.com port 443典型网络问题。先ping域名再curl -I测试目标地址确认服务器能否访问代码托管平台。Host key verification failedknown_hosts 里没有对应主机公钥。执行ssh-keyscan添加主机公钥但要注意不同的代码托管平台域名和端口可能不同。Permission denied (publickey)公钥没配置对或者私钥路径不对。先执行ssh -T测试认证。Authentication failedHTTPS 方式下用户名或 Token 错误。很多平台修改密码后旧 Token 会失效需要重新生成。排查顺序建议是先确认代码平台侧有没有权限再确认 Jenkins 服务器侧的 SSH 公钥和 known_hosts最后再看 Jenkins 任务里的凭据选择。不要改一次凭据就反复构建先用命令行手动克隆一次能通再跑 Jenkins。如果你同时需要拉多个仓库建议在 Jenkins 全局配置里把 Git 可执行文件路径固定而不是依赖每个用户的具体 PATH。否则 Jenkins 账号、登录账号在不同环境下解析到的 git 路径可能不一致构建稳定性会很差。5. 用一个小项目验证全局配置是否有效工具配好之后别急着做完整自动化流水线。先创建一个最简单的小项目把“拉代码、跑 Maven、看输出”这条链路走通再逐步扩展。5.1 最小验证步骤自由风格任务跑通一次新建任务时选择“自由风格软件项目”这是最容易入门、也最容易排错的任务类型。配置步骤大概是这样源码管理选 Git填入仓库地址选择正确的凭据。构建环境里先保持默认不需要额外勾选。添加构建步骤“Invoke top-level Maven targets”Goals 填clean package。保存后点击“立即构建”。第一次构建成功的目标不是代码能跑而是流程能通。成功的标志是控制台输出结尾出现BUILD SUCCESS并且没有FATAL或ERROR级别的错误。如果失败直接看“控制台输出”。如果你还没有现成的 Maven 项目可以用一个本地的空 Spring Boot 项目或普通 Java Web 项目先测试。重点不是业务逻辑而是验证 Jenkins 能不能在指定构建目录下拉取代码、调用 Maven、完成编译打包。5.2 成功输出和失败日志分别怎么看构建日志是排查问题最直接的入口。不要只看最后几行要从头往下看按顺序判断开头是否显示了正确的 Git 仓库地址和凭据 ID。是否出现 Maven 的版本信息以及使用的 JDK 路径。依赖下载是否走了你配置的镜像地址。最后报的是编译失败、测试失败还是打包失败。下面这个表格是我平时排查时常用的对照表不同现象对应不同的优先检查项。现象常见原因优先检查项构建找不到 JDKTools 里 JDK 路径无效或节点路径不一致java -version节点目录找不到 mvnMaven 工具路径未填写或 PATH 未生效mvn -vTools 配置Git 拉取失败凭据错误或 known_hosts 缺失命令行git clone凭据依赖下载慢或失败mirror 配置无效或仓库地址不对settings.xml构建日志下载 URL中文乱码构建节点编码设置不一致系统 LANGJenkins 环境变量只有把每个环节的预期结果都固定下来后续排错才不会变成“改一下就跑一次”的盲试。5.3 从单任务到Pipeline的扩展方向自由风格任务跑通后下一步可以迁移到 Pipeline。Pipeline 的好处是用代码描述构建步骤方便版本管理也方便在多个项目之间复用。Jenkinsfile 里可以声明使用哪个 JDK 和 Maven工具名称要和 Tools 里配置的名称完全一致。示例pipeline { agent any tools { jdk JDK17 maven Maven3.8 } stages { stage(Checkout) { steps { git url: gitexample.com:demo/demo.git, branch: main, credentialsId: jenkins-git-cred } } stage(Build) { steps { sh mvn clean package } } stage(Archive) { steps { archiveArtifacts artifacts: target/*.jar } } } }如果遇到No such tool named ...不要怀疑语法先去 Tools 里确认名称和大小写。工具名是你在 Jenkins 里配置的名字不是命令名。如果后续要处理多个分支可以考虑用多分支流水线。但前提是全局配置已经稳定。如果工具链还没完全对齐多分支会把问题放大每个分支都拉取失败每个分支都重复下载依赖日志满天飞反而更难定位。我一般会先单分支验证再开多分支。全局配置这一步并不难但它决定了后续所有构建任务的基础。踩过几次之后会发现很多问题不是 Jenkins 不好用而是 JDK、Maven、Git 的路径、版本和凭据没有对齐。先会单任务验证再考虑批量和 Pipeline整个部署流程会稳得多。如果你现在正卡在“插件装好了但构建一直失败”建议按前面顺序重新过一遍先确认插件再配工具再拉代码最后构建。
返回列表