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 认证配置,实现从代码拉取到构建打包的全自动化流程。

相关推荐
神鸟云几秒前
DELL服务器 R系列 IPMI的配置
linux·运维·服务器·网络·边缘计算·pcdn
herderl14 分钟前
**僵尸进程(Zombie Process)** 和**孤儿进程(Orphan Process)**
linux·运维·服务器·网络·网络协议
泽020239 分钟前
Linux 编译器 gcc 与 g++
linux·运维·服务器
G_H_S_3_1 小时前
【网络运维】Playbook项目实战:基于 Ansible Playbook 一键部署 LNMP 架构服务器
linux·运维·服务器·网络·ansible
yuxb732 小时前
Ansible 学习笔记:变量事实管理、任务控制与文件部署
linux·运维·笔记
岚天start2 小时前
Linux sar命令详细使用指南
linux·运维·服务器·负载·sar·磁盘io·sysstat
wanhengidc7 小时前
当云手机出现卡顿怎么办?
运维·服务器·安全·智能手机
clever1019 小时前
在ubuntu系统上离线安装jenkins的做法
ubuntu·servlet·jenkins