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

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.dtcms.com/a/337763.html

相关文章:

  • 北京朝阳公园——夏日清凉来袭
  • 第7节 神经网络
  • 登上Nature!清华大学光学神经网络研究突破
  • FastAPI + React:现代 Web 前后端分离开发的全栈实践指南
  • 【原理】Unity GC 对比 C# GC
  • 电竞酒店和高校宿舍对AI云电竞游戏盒子的需求有什么不同?
  • 静态资源保存插件横评:Save All Resources 与 ResourcesSaverExt 哪个更适合你?
  • 无人机基础知识
  • 测绘级组合导航如何重新定义大型无人机的高精度导航标准?
  • 用本地代理 + ZIP 打包 + Excel 命名,优雅批量下载跨域 PDF
  • PDF转图片需要用到什么技术?苹果手机怎样将PDF转为jpg?
  • HTML/CSS 实战知识点总结:从基础到常用效果全解析
  • 2025 世界机器人大会启示录:机构学 × AI × 视频链路的融合之路
  • 【低空安全】低空安全简介
  • 27.Linux 使用yum安装lamp,部署wordpress
  • Kafka 零拷贝(Zero-Copy)技术详解
  • 【学习嵌入式-day-27-进程间通信】
  • 开放最短路径优先协议
  • Read View 在 MVCC 里如何工作的?
  • DSP音频算法工程师技能2
  • IDE开发系列(2)扩展的IDE框架设计
  • GNhao/GN号,海外SIM号怎么注册详细步骤!
  • 纯前端表格控件SpreadJS v18.0 Update1正式发布——集成AI智能化插件
  • 大数据计算引擎(一)——Spark
  • gdb的load命令和传给opeocd的monitor flash write_image erase命令的区别
  • 如何实现前后端交互以及方法传参中传字段和传对象的区别和方法。
  • 音乐怎么测试?正在播放音乐,中途拔掉u盘,再次插上u盘,是怎么播放的?
  • 低端设备加载webp ANR
  • JavaScript 常用事件总结汇总
  • 前端css学习笔记7:各种居中布局空白问题