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 any
  tools {
    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.url
            git branch -v
            git 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 any
  stages {
    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 认证配置,实现从代码拉取到构建打包的全自动化流程。

相关推荐
用户0328472220709 小时前
如何搭建本地yum源(上)
运维
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz3 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦3 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw