尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Jenkins创建Maven项目:从零搭建自动化构建与持续集成流水线

Jenkins创建Maven项目:从零搭建自动化构建与持续集成流水线 1. 项目概述为什么要在Jenkins里创建Maven项目如果你是一名Java开发者或者负责后端项目的交付那么“Jenkins创建Maven项目”这个操作几乎是你迈入自动化构建与持续集成世界的第一步敲门砖。这听起来像是一个简单的配置动作但背后串联的是一整套从代码提交到可交付物的自动化流水线。我见过不少团队手动执行mvn clean install然后手动上传War包到服务器整个过程耗时费力且容易出错。而Jenkins配合Maven就是为了把这种重复、易错的手工操作变成稳定、可重复、可追溯的自动化流程。简单来说这个过程的核心价值在于将标准的Maven构建命令如编译、测试、打包封装到Jenkins的任务中由Jenkins来触发执行、管理环境、收集报告并通知结果。你不再需要记住复杂的命令参数也不需要担心本机环境是否干净。无论是开发提交后的即时构建还是定时触发的夜间构建或是合并代码后的集成构建Jenkins都能可靠地完成。结合“最新网络热词”里大家常搜的jenkins自动化部署、jenkins持续集成测试其最终目标正是实现CI/CD持续集成/持续部署的闭环。那么谁需要看这篇内容呢如果你是刚开始接触Jenkins的运维或开发对着一堆插件和配置项感到迷茫或者你的团队正准备搭建第一套自动化构建流程但不知从何下手亦或是你虽然用过但在配置Maven项目时总遇到一些古怪问题比如依赖下载失败、构建后操作不生效那么这篇从实操出发、包含大量避坑经验的总结应该能给你提供一条清晰的路径。我会假设你已经有了一台安装好的Jenkins服务器无论是用docker安装、linux服务器安装还是windows安装并且对Maven的基本概念如POM.xml、生命周期有初步了解。接下来我们就从设计思路开始一步步拆解。2. 整体设计与核心思路拆解在动手点击“新建Item”之前理清设计思路至关重要。一个健壮的Jenkins Maven项目任务不仅仅是能跑通mvn命令更要考虑环境隔离、依赖管理、构建效率和结果处理。2.1 核心架构Jenkins与Maven如何协同工作Jenkins在这里扮演的是“流程调度者”和“环境提供者”的角色而Maven则是具体的“构建执行者”。它们之间的协作主要通过以下几个关键组件实现Jenkins全局工具配置这是衔接点。你需要在这里告诉Jenkins“我的Maven安装在哪里”以及“我用哪个JDK”。这样Jenkins才能在构建时为任务提供正确的构建环境。很多新手卡在第一步就是因为没配置这个。Jenkins任务Job本身它定义了构建的触发条件如代码变更、定时、执行的具体步骤调用Maven、以及构建后的操作如归档制品、发布报告。Maven项目本身你的Java项目结构、pom.xml文件内容决定了Maven能做什么。Jenkins会读取这个文件来理解项目结构。这种解耦的好处是明显的开发人员只需关心pom.xml运维或构建工程师则在Jenkins上配置流水线两者通过版本控制库如Git中的代码和配置自然关联。2.2 关键方案选型与考量在创建任务时你会面临几个选择每个选择背后都有其考量1. 任务类型选择Freestyle project 还是 PipelineFreestyle project自由风格项目这是最直观、入门最快的方式。通过图形化界面勾选和填写表单来配置构建步骤。对于简单的“拉代码 - Maven构建 - 归档”场景它足够用。它的优点是配置简单所见即所得。Pipeline流水线使用Jenkinsfile一个文本文件来定义整个构建、测试、部署流程。它将配置作为代码IaC进行管理可以版本化、复用并且能实现更复杂的流程如并行构建、多阶段审批。这是当前的主流和最佳实践。我的选择与建议对于学习和初次实践可以从Freestyle project开始快速看到成果理解各个环节。但一旦流程稳定强烈建议迁移到Pipeline。因为Pipeline的Jenkinsfile可以放入代码库实现构建流程与代码同源同管避免了在Jenkins页面上手动配置的“配置漂移”问题。搜索热词中jenkins 发布springboot这类复杂流程用Pipeline会清晰得多。2. Maven版本与仓库管理Maven版本在Jenkins的“全局工具配置”中可以指定多个Maven版本如3.6.3, 3.8.x。建议使用与本地开发一致或公司规定的稳定版本。对于离线环境下maven怎么使用这个问题关键在于配置一个内部镜像仓库如Nexus、Artifactory并在settings.xml中指向它。将这个定制好的settings.xml文件上传到Jenkins服务器并在工具配置中指定使用该文件。仓库配置这是构建速度与稳定性的关键。一定要配置国内镜像源如阿里云Maven镜像以加速依赖下载。配置位置就在上面提到的、提供给Jenkins的settings.xml文件中。这直接解决了maven配置和依赖下载慢的核心痛点。3. 构建触发策略SCM轮询Poll SCMJenkins定期如每5分钟检查版本库Git/SVN是否有变更有则触发构建。这是最常用的自动触发方式。Webhook触发更高效的方式。在GitLab/GitHub等代码平台配置Webhook当有代码推送时主动通知Jenkins触发构建。这实现了真正的“持续集成”构建延迟在秒级。定时构建Build periodically例如每天凌晨2点执行一次完整构建用于生成每日版本或跑耗时的集成测试。一个典型的稳健设计是Webhook用于主干/开发分支的提交后快速反馈SCM轮询作为备用机制定时构建用于夜间发布包构建或长期测试。3. 核心细节解析与实操要点理解了整体设计我们深入到配置的每一个关键环节。这里藏着很多“坑”也是决定构建任务是否健壮的核心。3.1 前期准备Jenkins与工具的全局配置这是所有构建任务的基石配置不好后续步步维艰。1. 安装必要插件在Jenkins管理后台的“插件管理”中确保以下插件已安装Maven Integration plugin提供创建Maven项目类型和相关的构建步骤。Git plugin或Subversion plugin根据你的版本控制系统选择。Pipeline相关插件如果打算用Pipeline如Pipeline,Pipeline: Maven。Post-build相关插件例如Email Extension Plugin邮件通知、HTML Publisher plugin发布测试报告、Workspace Cleanup Plugin清理空间。2. 配置全局工具重中之重进入“系统管理” - “全局工具配置”。JDK配置不要勾选“自动安装”除非你网络环境极好。建议在服务器上预先安装好JDK如JDK 8或11然后在“JAVA_HOME”栏位填写绝对路径如/usr/lib/jvm/java-11-openjdk。这避免了构建时因下载JDK而失败。Maven配置取消“自动安装”同样建议在服务器上安装好Maven。从maven官网下载解压到特定目录如/opt/apache-maven-3.8.6。在配置页面点击“Maven安装...”取名如“Maven-3.8.6”在“MAVEN_HOME”填入上述路径。关键一步指定全局settings.xml。在“全局Maven配置”区域提供你精心配置的settings.xml文件。这个文件里必须配置好国内镜像仓库阿里云、以及可能需要的私有仓库认证信息。这是解决maven依赖下载慢和失败问题的根本。实操心得很多jenkins安装部署教程会教自动安装但在生产环境或内网网络问题会导致构建极不稳定。**“手动安装路径指定”**是保障构建环境一致性的黄金法则。将配置好的settings.xml和Maven安装包纳入你的服务器标准化配置清单中。3.2 创建与配置Maven项目任务Freestyle风格现在我们开始创建一个具体的任务。1. 新建任务与基础设置点击“新建Item”输入任务名称选择“构建一个Maven项目”。如果没有这个选项说明“Maven Integration plugin”未安装。描述简要说明这个任务的作用例如“用于构建和部署用户中心服务”。丢弃旧的构建务必勾选设置保留构建的天数如7天或最大构建个数如10个。Jenkins的构建记录和制品会占用大量磁盘不清理很快就把空间撑满。这是jenkins如何停止任务之外更重要的空间管理手段。2. 源码管理Source Code Management这是告诉Jenkins“代码从哪里来”的地方。选择你的版本控制系统如Git。Repository URL填写你的代码库地址。如果是私有仓库需要在“Credentials”处添加用户名密码或SSH密钥。Branches to build指定要构建的分支通常是*/main或*/develop。对于多分支构建Pipeline是更好的选择。3. 构建触发器Build Triggers决定何时开始构建。轮询 SCM日程表遵循Cron语法。例如H/5 * * * *表示每5分钟检查一次。H代表哈希用于将任务分散执行避免所有任务整点同时运行。其他如“Build after other projects are built”在其他项目构建后构建可用于构建链。4. 构建环境Build Environment这里有一些有用的选项。Delete workspace before build starts每次构建前清空工作空间。这能确保构建环境绝对干净避免残留文件干扰。但缺点是每次都要重新拉取全部代码和依赖构建时间会变长。对于依赖变化不频繁的项目可以不勾选以提升速度。Provide Configuration files可以在这里提供项目特定的settings.xml或其它配置文件优先级高于全局配置。5. Pre Steps构建前步骤在Maven构建前执行的Shell或Windows命令。例如可能需要先安装一些特定系统的依赖包或者执行一些环境检查脚本。6. Build核心构建步骤这是任务的心脏。Root POM默认是pom.xml。如果你的项目是一个多模块Maven项目的子模块或者POM文件不在根目录需要修改此路径。Goals and options填写Maven命令的目标Goals。最常用、最标准的组合是clean install -DskipTestsclean清理上次构建的输出。install将打包好的构件安装到本地仓库以便其他项目引用。-DskipTests跳过单元测试。在快速验证打包是否成功时使用。正式构建应该去掉此参数让测试运行。其他常用选项-Pprod激活prodprofile用于生产环境构建。-Dmaven.test.failure.ignoretrue即使测试失败也继续构建不推荐常规使用。-U强制更新快照依赖。对于使用-SNAPSHOT版本的项目确保每次获取最新依赖。注意事项maven命令行 clean install是基础但在Jenkins中你还可以利用jenkins可用环境变量。例如在Goals中可以使用${BUILD_NUMBER}将构建号传入Maven用于生成包含版本信息的包。命令可以写成clean package -Dbuild.version${BUILD_NUMBER}。7. Post Steps构建后步骤在Maven构建成功后执行的步骤。例如如果Maven打包成功你可以在这里执行一些Shell命令将生成的Jar/War包复制到某个临时目录或者调用另一个部署脚本。8. 构建设置Build Settings与后构建操作Post-build Actions这里是构建完成后的处理。构建设置例如可以设置“构建失败后重试次数”对应热词jenkins 如何设置构建失败 重试。后构建操作这是价值呈现的关键环节。Archive the artifacts归档制品。例如填写target/*.jar或target/*.warJenkins会将匹配的文件保存起来供后续下载或部署使用。Publish JUnit test result report如果运行了测试指定测试报告路径如target/surefire-reports/*.xmlJenkins会解析并展示测试趋势图。Publish HTML reports如果需要展示更丰富的HTML报告如Jacoco覆盖率报告、API文档可以用这个插件。E-mail Notification配置邮件在构建失败或不稳定时通知相关人员。4. 实操过程从零创建一个Spring Boot项目的构建任务让我们以一个典型的Spring Boot项目为例走一遍完整的Freestyle项目配置流程。假设项目使用Git管理最终要生成一个可执行的Jar包。4.1 步骤一全局环境准备登录Jenkins进入“系统管理” - “全局工具配置”。JDK在“JDK”部分点击“JDK安装...”取消“自动安装”。在别名输入“JDK11”在“JAVA_HOME”输入服务器上JDK 11的安装路径例如/usr/java/jdk-11.0.15。你可以通过java -version和which java找到路径。Maven在“Maven”部分点击“Maven安装...”取消“自动安装”。取名“Maven-3.8.6”在“MAVEN_HOME”输入服务器上Maven的安装路径例如/opt/apache-maven-3.8.6。全局Maven配置在“全局Maven配置”下选择“Settings file in filesystem”并填入你准备好的、配置了阿里云镜像的settings.xml文件路径例如/opt/maven-conf/settings.xml。点击保存。4.2 步骤二创建并配置Maven任务点击Jenkins首页的“新建Item”。输入任务名称例如“user-service-ci”选择“构建一个Maven项目”点击“OK”。General描述“用户服务的持续集成构建任务”。勾选“丢弃旧的构建”策略选择“保持构建的天数”填写“7”。源码管理选择“Git”。Repository URL:https://your-git-server.com/group/user-service.gitCredentials: 添加你的Git账户凭据。Branches to build:*/main构建主分支。构建触发器勾选“Poll SCM”。日程表填写H/10 * * * *每10分钟检查一次代码变更。Pre Steps本例中不需要跳过。BuildRoot POM:pom.xml默认。Goals and options:clean package -DskipTests首次配置先跳过测试确保流程通。高级按钮可以展开在“Properties”里可以添加额外的Maven属性例如-Dapp.envjenkins。Post Steps本例中不需要Maven的package阶段已经完成了打包。后构建操作点击“增加构建后操作步骤”选择“Archive the artifacts”。在“要归档的文件”中填写target/*.jar。这样每次成功构建后生成的Jar包都会被保存下来。再次点击“增加构建后操作步骤”选择“Publish JUnit test result report”。在“测试报告XML”中填写target/surefire-reports/*.xml。这样当你后续去掉-DskipTests参数后测试结果就能被收集和展示。可选增加“Editable Email Notification”来配置邮件提醒。4.3 步骤三执行与验证点击“保存”。在任务页面点击左侧的“立即构建”。你会看到任务开始排队并执行。进入构建历史点击本次构建的编号再点击“控制台输出”。这里将显示完整的构建日志是排查问题的第一现场。观察日志首先会看到Jenkins从Git拉取代码。然后会显示使用的JDK和Maven版本与你配置的一致。接着开始执行mvn clean package。你会看到Maven下载依赖从你配置的镜像仓库、编译、打包的过程。如果一切顺利最后会显示“BUILD SUCCESS”并且后处理步骤会显示“Archiving artifacts”表示Jar包已被归档。回到任务首页你应该能看到“最新制品”里出现了你的Jar包可以下载。如果配置了测试报告还会出现“测试结果”趋势图。至此一个最基本的、自动化的Maven项目构建任务就创建完成了。它实现了代码变更的自动检测、自动编译打包、以及制品的自动归档。5. 进阶使用Pipeline实现更优雅的构建虽然Freestyle项目简单直观但Pipeline才是现代Jenkins的推荐方式。它将构建流程定义为代码更灵活、更强大、更易于维护。这里给出一个等价的Pipeline脚本示例。5.1 创建Pipeline任务新建Item选择“Pipeline”取名“user-service-pipeline”。在“Pipeline”配置区域定义可以选择“Pipeline script”直接写脚本或“Pipeline script from SCM”从代码库读取Jenkinsfile。最佳实践是后者。我们以直接写脚本为例在“Script”框中输入以下内容pipeline { agent any // 指定在任何可用代理上运行 tools { maven Maven-3.8.6 // 引用全局工具配置中定义的Maven名称 jdk JDK11 // 引用全局工具配置中定义的JDK名称 } stages { stage(Checkout) { steps { git branch: main, url: https://your-git-server.com/group/user-service.git, credentialsId: your-git-credential-id // 你在Jenkins中配置的凭据ID } } stage(Build Test) { steps { sh mvn clean package // 这里去掉了 -DskipTests会运行测试 } post { success { junit target/surefire-reports/*.xml // 收集测试报告 } } } stage(Archive) { steps { archiveArtifacts artifacts: target/*.jar, fingerprint: true } } } post { always { cleanWs() // 总是清理工作空间 } failure { mail to: teamexample.com, subject: 构建失败: ${env.JOB_NAME} - ${env.BUILD_NUMBER}, body: 请检查构建日志: ${env.BUILD_URL} } } }这个Pipeline脚本清晰地定义了三个阶段检出代码、构建与测试、归档制品。并且在最后无论成功失败都清理空间失败时发送邮件。整个流程一目了然且可以轻松地版本化管理。6. 常见问题与排查技巧实录即使按照步骤操作也难免会遇到问题。下面是我在多年实践中总结的一些高频问题及解决方法。6.1 依赖下载失败或极慢现象构建日志卡在下载某个依赖很久后超时失败。排查检查Jenkins服务器网络是否能访问外网或内部仓库。最关键的一步登录Jenkins服务器切换到执行构建的用户通常是jenkins手动执行mvn dependency:resolve命令并使用你配置给Jenkins的同一个settings.xml文件通过-s参数指定。观察下载源。命令示例sudo -u jenkins mvn -s /opt/maven-conf/settings.xml dependency:resolve检查settings.xml中的镜像配置是否正确。确保mirrorOf*/mirrorOf或mirrorOfcentral/mirrorOf生效。解决确保settings.xml中配置了正确的国内镜像如阿里云。对于公司内部私有依赖需要在settings.xml中配置server和repository。考虑搭建并强制使用内部镜像仓库如Nexus所有依赖都从内网获取这是解决依赖问题最彻底的办法。6.2 Maven命令未找到或版本不对现象日志报错mvn: command not found或使用的Maven/JDK版本与预期不符。排查检查Jenkins任务的“配置”页面在Build部分的“高级”选项下是否有指定不同的Maven版本有时这里会覆盖全局设置。检查构建日志的开头部分Jenkins会打印出它使用的工具路径。核对是否与你全局配置的一致。解决确保在“全局工具配置”中正确配置了Maven和JDK的路径并且在Pipeline或任务配置中正确引用了其名称。对于Freestyle项目确保没有在“构建环境”或“Pre Steps”中通过PATH变量覆盖了工具路径。6.3 构建成功但未归档制品现象控制台输出显示BUILD SUCCESS但任务首页没有“最新制品”或者归档的文件不对。排查检查“归档制品”的配置路径。路径是相对于工作空间根目录的。使用绝对路径或错误的相对路径都会导致找不到文件。查看构建日志末尾搜索“Archiving artifacts”看Jenkins尝试归档哪些文件以及是否遇到“No artifacts found”警告。确认Maven构建后制品是否真的生成在了你指定的路径下。可以在“Post Steps”里加一条shell命令ls -la target/来查看。解决使用通配符时确保路径正确。例如对于Spring Boot项目默认打包成的可执行Jar包名字可能包含版本号如myapp-0.0.1-SNAPSHOT.jar。使用target/*.jar可以匹配。如果想匹配更精确可以用target/myapp-*.jar。如果项目是多模块的制品可能不在根目录的target下而在子模块的target目录里路径需要写对例如user-service-module/target/*.jar。6.4 权限问题导致构建失败现象构建过程中执行某些Shell命令如文件复制、启动脚本时提示“Permission denied”。排查Jenkins默认使用jenkins用户Linux或一个专用服务账户Windows运行。该用户可能没有某些目录的写权限或执行某些命令的权限。解决谨慎方案修改相关目录的权限让jenkins用户有权访问。例如sudo chown -R jenkins:jenkins /opt/deploy-packages。更安全的方案避免在构建过程中执行需要高权限的操作。如果必须执行可以考虑使用sudo并配置免密或者将这部分操作移到专门的、有权限的部署脚本中由Jenkins调用。6.5 控制台输出日志乱码现象构建日志中的中文显示为乱码。排查这通常是Jenkins服务器或JVM的字符集编码问题。解决检查Jenkins服务器的系统语言环境。可以尝试在启动Jenkins的JVM参数中添加-Dfile.encodingUTF-8。对于从Git拉取的中文文件注释乱码可以尝试在Jenkins的“系统管理”-“系统配置”中找到“全局属性”添加一个环境变量LANG值为en_US.UTF-8或zh_CN.UTF-8。在Maven命令中也可以强制指定编码mvn clean install -Dfile.encodingUTF-8。创建一个Jenkins Maven项目从表面看是填几个表单但其稳定性依赖于全局环境配置、网络策略、权限管理和对构建流程的深刻理解。最好的学习方式就是动手实践从一个简单的项目开始配置好跑通它然后观察日志尝试理解每一个步骤。遇到问题时善用构建的“控制台输出”日志它包含了最详细的错误信息是解决问题的金钥匙。当你熟悉了基础流程后再逐步探索Pipeline、多分支构建、与Docker集成、自动化部署等更高级的特性从而构建起真正高效、可靠的持续交付流水线。
返回列表