Jenkins基础教程(12)Jenkins配置工具之Maven设置:Jenkins牵手Maven:打包就像谈恋爱,配置对了才甜蜜!

  • 时间:2025-11-23 20:09 作者: 来源: 阅读:0
  • 扫一扫,手机访问
摘要:每次代码提交后,Jenkins自动构建打包,成功率达到100%,这种爽感只有配置正确的Maven环境才能给。 一、缘起:Jenkins与Maven为何需要“相亲” 作为一个开源的自动化服务器,Jenkins主要负责持续集成和持续交付(CI/CD) 。而Maven是一个基于POM(Project Object Model)的构建工具,用于Java项目的构建、依赖管理和发布管理。 简单来说,它

每次代码提交后,Jenkins自动构建打包,成功率达到100%,这种爽感只有配置正确的Maven环境才能给。


一、缘起:Jenkins与Maven为何需要“相亲”

作为一个开源的自动化服务器,Jenkins主要负责持续集成和持续交付(CI/CD) 。而Maven是一个基于POM(Project Object Model)的构建工具,用于Java项目的构建、依赖管理和发布管理

简单来说,它俩的关系就像咖啡和糖:Jenkins负责自动化流程(泡咖啡),Maven负责实际构建(糖的甜味)。只有二者完美配合,才能调出一杯令人满意的Java应用程序。

在实际工作中,Jenkins与Maven的集成可以实现自动化构建、测试和部署,提高开发效率和代码质量。每次代码提交后,Jenkins可以自动触发Maven构建,运行测试,并将结果报告给团队,大大减少了人工干预的需求。

二、婚前准备:环境搭建与安装

2.1 Java环境配置

既然Jenkins是基于Java开发的,而Maven也是Java项目,所以首先得确保系统已安装JDK 8或更高版本

在Linux系统上,可以使用以下命令安装OpenJDK:



sudo apt update
sudo apt install openjdk-11-jdk

安装完成后,通过 java -version验证安装是否成功。

重要提示:请确保Jenkins使用的JDK版本与项目所需的JDK版本一致,否则可能遇到难以排查的构建错误。

2.2 Maven安装

接下来是安装Maven。在Linux系统中,可以使用APT安装:



sudo apt update
sudo apt install maven

或者,你也可以手动下载并安装特定版本的Maven:



wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar xf apache-maven-3.3.9-bin.tar.gz
sudo mv apache-maven-3.3.9 /usr/local/maven

安装完成后,需要配置环境变量。编辑 ~/.bashrc /etc/profile文件,添加以下内容:



export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin

然后执行 source ~/.bashrc使配置生效,并通过 mvn -v检查Maven是否安装成功。

2.3 Jenkins安装

现在轮到主角Jenkins登场了。在Linux系统上安装Jenkins的命令如下:



wget -q -O - https://pkg.jenkins.io/keys/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian/ / > /etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins

安装完成后,启动Jenkins服务并检查状态:



sudo systemctl start jenkins
sudo systemctl status jenkins

如果一切正常,现在可以通过浏览器访问 http://<your_server_ip>:8080来初始化Jenkins了。首次访问时,需要从 /var/lib/jenkins/secrets/initialAdminPassword文件中获取初始管理员密码。

三、初次约会:Jenkins中配置Maven环境

3.1 安装Maven插件

打开Jenkins主页,点击”Manage Jenkins”,然后选择”Manage Plugins”。

在”Available”选项卡中搜索”Maven Integration”插件并安装。如果已经安装,确保插件是最新版本。

这个插件是Jenkins和Maven之间的”翻译官”,让它们能够理解彼此的指令。

3.2 全局工具配置

接下来,我们需要告诉Jenkins Maven安装在哪里。

返回”Manage Jenkins”页面,选择”Global Tool Configuration”。找到”Maven”部分,点击”Add Maven”按钮。设置Maven的名称(如”Maven 3.6”)并选择”Maven installations”中的”Install automatically”。选择Maven版本,或者手动配置Maven的路径。

如果你选择手动配置,需要取消勾选”自动安装”,然后指定MAVEN_HOME的路径。

同时,不要忘记配置JDK。在”Global Tool Configuration”页面的”JDK”部分,点击”Add JDK”,设置JDK的名称并指定JAVA_HOME的路径。

配置完成后,记得点击保存。至此,Jenkins和Maven已经成功”牵手”,可以开始协同工作了。

四、热恋期:创建第一个Maven项目

4.1 新建Maven项目

在Jenkins主页,点击”New Item”按钮,输入项目名称,选择”Maven project”类型,然后点击OK。

如果是首次配置,可能看不到Maven project选项,这意味着Maven Integration插件没有正确安装,需要返回上一步检查插件安装情况。

4.2 配置源码管理

在项目配置页面,找到”Source Code Management”部分,选择你使用的版本控制系统(如Git),并输入仓库URL。

如果需要认证,点击”Add”按钮配置凭证(用户名/密码或SSH密钥)。

4.3 配置构建触发器

构建触发器决定了何时执行构建。常见的触发器选项包括:

定时构建:使用cron表达式设置构建时间表,例如 H/30 * * * *表示每30分钟构建一次。SCM轮询:定期检查代码仓库是否有变更,有变更时触发构建。Webhook触发:当代码推送到仓库时,Git仓库会通知Jenkins触发构建。

对于Maven项目,推荐使用”Build whenever a SNAPSHOT dependency is built”选项,这样可以确保当项目依赖的库更新时自动重新构建。

4.4 配置Pre Steps和Post Steps

在”Pre Steps”部分,可以添加构建前的准备工作,例如执行Shell命令清理工作空间:



echo "Cleaning workspace..."
mvn clean

在”Build”部分,配置Root POM(通常是pom.xml)和Goals(如 clean install)。

Goals决定了Maven执行哪些操作,常见的有:

clean:清理目标 compile:编译源代码 test:运行单元测试 package:打包编译后的代码 install:将包安装到本地仓库

4.5 配置构建后操作

在”Post Steps”部分,可以配置构建完成后执行的操作,例如:

发布JUnit测试结果报告归档构建产物(如WAR、JAR文件)发送构建结果通知(如邮件)

对于测试报告,可以配置”Publish JUnit test result report”,并指定测试结果文件的路径,例如 **/target/surefire-reports/*.xml

配置完成后,点击保存,返回项目主页,点击”Build Now”手动触发第一次构建。你可以在控制台输出中查看构建过程和结果。

五、婚姻生活:高级配置与Pipeline实战

5.1 使用Jenkins Pipeline

对于复杂的项目,推荐使用Jenkins Pipeline,它提供了更加灵活和可编排的构建方式。在Pipeline中,你可以通过Jenkinsfile来定义整个构建流程。

以下是一个典型的Maven项目Pipeline示例:



pipeline {
    agent any
    tools {
        maven 'Maven 3.6.3'
        jdk 'JDK 11'
    }
    options {
        buildDiscarder logRotator(daysToKeepStr: '14', numToKeepStr: '10')
        timeout(time: 30, unit: 'MINUTES')
    }
    stages {
        stage('Checkout') {
            steps {
                git branch: 'main',
                    url: 'https://github.com/your/repository.git'
            }
        }
        stage('Build') {
            steps {
                sh 'mvn clean compile'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
            post {
                always {
                    junit testResults: '**/target/surefire-reports/*.xml'
                }
            }
        }
        stage('Package') {
            steps {
                sh 'mvn package -DskipTests'
            }
        }
    }
    post {
        failure {
            emailext (
                subject: "构建失败: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                body: "检查构建详情: ${env.BUILD_URL}",
                to: "team@example.com"
            )
        }
        success {
            echo '构建成功!'
        }
    }
}

这个Pipeline定义了一个包含四个阶段的构建流程:Checkout(拉取代码)、Build(编译)、Test(测试)和Package(打包)。每个阶段都执行相应的Maven命令。

5.2 实际项目案例:Apache Struts的Jenkinsfile

让我们看看一个真实世界的例子——Apache Struts项目的Jenkins配置:



pipeline {
  agent none
  options {
    buildDiscarder logRotator(daysToKeepStr: '14', numToKeepStr: '10')
    timeout(80)
    disableConcurrentBuilds()
    skipStagesAfterUnstable()
    quietPeriod(30)
  }
  triggers {
    pollSCM 'H/15 * * * *'
  }
  stages {
    stage('Prepare') {
      agent { label 'ubuntu' }
      stages {
        stage('Clean up') {
          steps {
            cleanWs deleteDirs: true, patterns: [[pattern: '**/target/**', type: 'INCLUDE']]
          }
        }
      }
    }
    stage('JDK 21') {
      agent { label 'ubuntu' }
      tools {
        jdk 'jdk_21_latest'
        maven 'maven_3_latest'
      }
      environment {
        MAVEN_OPTS = "-Xmx1024m"
      }
      stages {
        stage('Test') {
          steps {
            sh './mvnw -B -DskipAssembly verify'
          }
          post {
            always {
              junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
            }
          }
        }
      }
    }
  }
}

这个Jenkinsfile有几个值得注意的特点:

使用multiple stages在不同JDK版本下测试兼容性配置了内存选项(MAVEN_OPTS)以避免内存不足错误设置了超时并发控制使用post always块确保测试结果无论如何都被收集配置了SCM轮询(每15分钟一次)自动触发构建

5.3 性能优化技巧

随着项目规模增长,构建性能可能成为瓶颈。以下是一些优化建议:

并行构建:在Pipeline的stage中使用 parallel指令同时执行多个独立任务。构建缓存:合理配置Maven的依赖缓存,避免每次构建都下载全部依赖。增量构建:对于大型项目,可以只构建变更的模块。资源分配:调整Jenkins的JVM内存设置,避免内存溢出。

六、七年之痒:常见问题与解决方案

即使配置再完美,也难免会遇到问题。以下是一些常见问题及解决方法:

6.1 Maven版本不兼容

问题:构建失败,错误信息提示Maven版本不兼容。

解决:在Jenkins的Global Tool Configuration中确保使用的是项目所需的Maven版本。对于老旧项目,可能需要使用较旧的Maven版本。

6.2 内存不足错误

问题:构建过程中出现Java heap space或OutOfMemoryError。

解决:在MAVEN_OPTS环境变量中增加内存设置,例如:



environment {
    MAVEN_OPTS = "-Xmx2048m -XX:MaxPermSize=512m"
}

6.3 测试失败

问题:单元测试随机失败或不稳定。

解决

在Maven命令中添加 -Dmaven.test.failure.ignore=true使构建即使测试失败也继续将不稳定的测试标记为忽略优化测试代码,确保独立性

6.4 依赖下载失败

问题:网络问题导致依赖下载失败。

解决

配置Maven使用内部镜像仓库在Jenkins中增加重试机制缓存常用依赖

6.5 权限问题

问题:Jenkins没有足够权限访问资源。

解决

确保Jenkins用户有读写工作空间的权限正确配置Git、Docker等外部工具的凭据

七、白头偕老:最佳实践与总结

经过多次试错,我总结出了以下Jenkins与Maven集成的最佳实践

版本控制化:将Jenkinsfile与项目代码一起存储在版本控制中,实现Pipeline as Code。环境标准化:在所有环境中使用相同的JDK和Maven版本,避免”在我机器上是好的”问题。凭据管理:使用Jenkins的凭据管理功能安全存储密码、API密钥等敏感信息,不要硬编码在Pipeline中。保持简洁:开始时应保持Pipeline简单,随着需求增长再增加复杂性。监控与通知:配置构建失败通知,确保团队能及时响应问题。定期维护:定期清理旧的构建记录和工件,释放磁盘空间。安全配置:配置Jenkins的安全设置,如用户权限管理、防火墙规则等,确保Jenkins的安全性。备份策略:定期备份Jenkins配置,防止意外丢失。

Jenkins与Maven的集成,就像任何一段成功的关系,需要理解、耐心和定期维护。当它们配合默契时,能够极大提升开发效率,让团队更专注于创造价值,而不是解决构建问题。

从简单的自动化构建到复杂的多环境部署,Jenkins与Maven的组合为Java项目提供了强大的持续集成和交付能力。现在,是时候让你的项目也体验这种顺畅无比的构建感受了!


附录:常用Maven命令参考

命令

说明

mvn clean

清理目标目录

mvn compile

编译源代码

mvn test

运行单元测试

mvn package

打包编译后的代码

mvn install

将包安装到本地仓库

mvn deploy

将包部署到远程仓库

mvn verify

运行所有检查验证包是否有效

mvn site

生成项目站点文档

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】Svelte框架结合SpreadJS实现纯前端类Excel在线填报(2025-11-23 22:34)
【系统环境|】在Three.js中使用HDRI贴图作为3D背景和光源(2025-11-23 22:34)
【系统环境|】看完这一篇学会MyBatis就够了(2025-11-23 22:33)
【系统环境|】linux ps命令详解(2025-11-23 22:33)
【系统环境|】Linux日常小知识EFK(2025-11-23 22:32)
【系统环境|】Linux系统的ps命令和top命令介绍(2025-11-23 22:32)
【系统环境|】跟LaoLiu老刘记英语单词——————刘怀勋(2025-11-23 22:31)
【系统环境|】电容的滤波和退耦,真的理解了吗?(2025-11-23 22:31)
【系统环境|】共射放大电路的低频截频计算方法验证(2025-11-23 22:30)
【系统环境|】“谐音梗英文名,看看你的是什么?”(2025-11-23 22:30)
手机二维码手机访问领取大礼包
返回顶部