当前位置: 首页 > java >正文

Jenkins全链路教程——Jenkins调用Maven构建项目

Jenkins 中 Maven 构建的核心要素

  1. Maven 环境配置:Jenkins 需知道 Maven 安装路径

  2. JDK 依赖:Maven 运行依赖 Java 环境,需提前配置

  3. 构建命令:通过 mvn clean package 等命令执行构建

  4. 源码管理:结合 Git 插件拉取代码(参考之前的 SSH 认证配置)

  5. 构建产物处理:打包后的 JAR/WAR 包需归档或部署

必备插件

在 Jenkins 插件管理中安装:

  • Maven Integration plugin(Maven 集成核心插件)

  • JDK Tool Plugin(JDK 环境管理)

🔨 三种构建方式详解
方式一:自由风格项目
1. 全局工具配置
  1. 进入 系统管理 → 全局工具配置

  2. JDK 配置:

    •  取消 “自动安装”,填写容器内 JDK 路径(如 /usr/local/openjdk-11

    •  别名:JDK11

  3.  Maven 配置:

    • 取消 “自动安装”,填写 Maven 路径(如 /usr/share/maven

    • 别名:Maven3.9.10

    • 点击 “保存”

以下是之前教学的配置:

 

 

2. 项目配置步骤
  1. 新建项目 → 选择 “自由风格项目”——freestyle-maven

  2. 源码管理(复用 Git 配置):

    • 仓库 URL:ssh://git@192.168.145.129:2222/root/k8s-dashboard.git

    • 凭证:选择之前配置的 gitlab-ssh-cred

  3.  构建环境:

    •  勾选 “Provide Node & npm bin/folder to PATH”(如需 Node 环境)

  4.  构建步骤:

    •  点击 “Add build step → Invoke top-level Maven targets”

    •  Maven Version:选择全局配置的 Maven

    •  Goals:填写 clean package -DskipTests(跳过测试快速构建)

    •  执行shell
      echo "===== 构建产物信息 ====="
      ls -lh target/*.jar  # 列出 target 下的 JAR 文件
      echo "===== 制品路径 ====="
      pwd  # 显示当前工作目录(完整路径为:工作目录/target/xxx.jar)
  5.  构建后操作:

    •  点击 “Add post-build step → Archive the artifacts”

    •  Files to archive:填写 target/*.jar(归档 JAR 包)

  6.  保存后点击 “立即构建”,查看控制台输出

 

关键日志验证

成功构建会显示:

[INFO] Building jar: /var/jenkins_home/workspace/xxx/target/xxx.jar
[INFO] BUILD SUCCESS

 

 

方式二:Pipeline 项目
1. Jenkinsfile
pipeline {agent anytools {jdk 'JDK11'// 对应全局配置的 JDK 名称maven 'Maven3.9.10'// 对应全局配置的 Maven 名称}environment {// 引用全局凭证(ID必须与之前创建的一致)GIT_CRED = credentials('gitlab-ssh-cred')// GitLab仓库信息GIT_URL = 'ssh://git@192.168.145.129:2222/root/k8s-dashboard.git'BRANCH_NAME = 'main'}stages {stage('📥 代码拉取与验证') {steps {script {echo "🔍 开始拉取 ${env.GIT_URL} 的 ${env.BRANCH_NAME} 分支"checkout([$class:'GitSCM',branches: [[name:"refs/heads/${env.BRANCH_NAME}"]],userRemoteConfigs: [[url: env.GIT_URL,credentialsId:'gitlab-ssh-cred',name:'origin',  // 远程仓库别名refspec:'+refs/heads/*:refs/remotes/origin/*'// 获取所有分支引用]],// 高级配置extensions: [[$class:'CheckoutOption', timeout:30],  // 检出超时30分钟[$class:'LocalBranch', localBranch: env.BRANCH_NAME],  // 本地分支名称[$class:'CloneOption', depth:1,  // 浅克隆(仅拉取最新提交,加快速度)noTags:false,  // 获取标签reference:'', timeout:10// 克隆超时10分钟]]])// 代码拉取后验证echo "✅ 代码拉取完成,工作目录:${pwd()}"echo "🔍 验证Git信息:"sh '''git config --list | grep remote.origin.urlgit branch -vgit status'''}}}stage('🔨 代码编译') {steps {sh 'mvn clean compile -DskipTests'}}
//  stage('🧪 单元测试') {
//     steps {
//       sh 'mvn test'
//     }
//     post {
//       always {
//         junit 'target/surefire-reports/*.xml'  // 收集测试报告
//       }
//     }
//   }stage('📦 打包构建') {steps {sh 'mvn package -DskipTests'}}}post {success {slackSend channel:'#devops-alerts', message:"✅ Jenkins构建成功:${env.JOB_NAME} #${env.BUILD_NUMBER}\n分支:${env.BRANCH_NAME}\n构建地址:${env.BUILD_URL}"archiveArtifacts artifacts:'target/*.jar', fingerprint:true// 归档产物}failure {slackSend channel:'#devops-alerts', message:"❌ Jenkins构建失败:${env.JOB_NAME} #${env.BUILD_NUMBER}\n分支:${env.BRANCH_NAME}\n错误日志:${env.BUILD_URL}console"}}
}
2. 项目配置

选择上节课配置的流水线【gitlab-test-pipeline】直接运行即可。

 

 

 

方式三:引入共享库
1. 共享库封装 Maven 构建步骤

在共享库项目的 vars/mavenBuild.groovy 中定义:

/*** 标准化 Maven 构建函数* @param params 构建参数(如 goals、skipTests 等)*/
def call(Map params = [:]) {
def goals = params.goals ?: 'clean package'
def skipTests = params.skipTests ?: true
def jdkName = params.jdkName ?: 'JDK11'
def mavenName = params.mavenName ?: 'Maven3.9.10'// 配置 JDK 和 Maven 环境withMaven(jdk: jdkName, maven: mavenName) {echo "🚀 开始执行 Maven 命令:${goals}"def cmd = "${goals}"if (skipTests) {cmd += " -DskipTests"}sh "mvn ${cmd}"// 自动归档产物archiveArtifacts artifacts:'target/*.jar', fingerprint:true}
}

 

 

2. 在项目中使用共享库

选择上节课配置的流水线【gitlab-test-pipeline-shared-library】直接编辑运行即可。

@Library('my-shared-lib@main') _  // 导入共享库(指定版本)pipeline {agent anystages {stage('📥 标准化代码拉取') {steps {script {gitCheckout(repoUrl:'ssh://git@192.168.145.129:2222/root/k8s-dashboard.git',branch:'main',depth:0// 完整克隆(包含历史记录))}}}stage('🔨 标准化构建') {steps {mavenBuild(goals:'clean package',skipTests:true)}}}
}

 

 

📌 常见问题排查
  1.  Maven 命令找不到:检查全局工具配置中 Maven 路径是否正确

  2.  JDK 版本不兼容:在 tools 块指定正确的 JDK 版本

  3.  依赖下载缓慢:在 Maven 配置文件(settings.xml)中添加国内镜像:
    <mirrors><mirror><id>aliyun</id><url>https://maven.aliyun.com/repository/public</url><mirrorOf>central</mirrorOf></mirror>
    </mirrors>
  4.  构建产物未归档:检查 “Files to archive” 路径是否与实际打包路径一致

通过以上三种方式,可根据项目复杂度选择合适的构建方案,结合之前的 Git 认证配置,实现从代码拉取到构建打包的全自动化流程。

http://www.xdnf.cn/news/18117.html

相关文章:

  • Kafka文件存储机制
  • 深入浅出决策树
  • (二十)深入了解 AVFoundation-编辑:使用 AVMutableVideoComposition 实现视频加水印与图层合成(下)——实战篇
  • Google 的 Opal:重新定义自动化的 AI 平台
  • Git版本控制与协作
  • 4.9 配置 开发服务器 和 请求代理
  • 汽车之家联合HarmonyOS SDK,深度构建鸿蒙生态体系
  • 使用Idea安装JDK
  • 从零开始,系统学习AI与机器学习:一份真诚的学习路线图
  • 容器化 Android 开发效率:cpolar 内网穿透服务优化远程协作流程
  • Baumer高防护相机如何通过YoloV8深度学习模型实现网球运动员和网球速度的检测分析(C#代码UI界面版)
  • WPF中BindingList<T>和List<T>
  • Conda技巧:修改Conda环境目录,节省系统盘空间
  • 学习:各种不同类型的for循环遍历,forEach/map/filter/every/some/includes/reduce的详细用法(1)
  • 【项目】分布式Json-RPC框架 - 项目介绍与前置知识准备
  • [Linux]学习笔记系列 --[mm][list_lru]
  • Redis-缓存-穿透-布隆过滤器
  • 测试Windows10IoT系统是否可以正常运行KingSCSDA3.8软件
  • Transformer架构的数学本质:从注意力机制到大模型时代的技术内核
  • 蓝凌EKP产品:JSP 性能优化和 JSTL/EL要点检查列表
  • Excel 表格数据自动填充
  • C语言私人学习笔记分享
  • Canny边缘检测
  • pyecharts可视化图表组合组件_Grid:打造专业数据仪表盘
  • python pandas库 series如何使用
  • 电脑上搭建HTTP服务器在局域网内其它客户端无法访问的解决方案
  • 【Tech Arch】Hive技术解析:大数据仓库的SQL桥梁
  • 【从零开始学习Redis】项目实战-黑马点评D2
  • Conda 环境 在AI 私有化部署 有怎么用?
  • 迅速掌握Git通用指令