Jenkins全链路教程——Jenkins调用Maven构建项目
Jenkins 中 Maven 构建的核心要素
Maven 环境配置:Jenkins 需知道 Maven 安装路径
JDK 依赖:Maven 运行依赖 Java 环境,需提前配置
构建命令:通过
mvn clean package
等命令执行构建源码管理:结合 Git 插件拉取代码(参考之前的 SSH 认证配置)
构建产物处理:打包后的 JAR/WAR 包需归档或部署
必备插件
在 Jenkins 插件管理中安装:
Maven Integration plugin(Maven 集成核心插件)
JDK Tool Plugin(JDK 环境管理)
🔨 三种构建方式详解
方式一:自由风格项目
1. 全局工具配置
进入 系统管理 → 全局工具配置
JDK 配置:
取消 “自动安装”,填写容器内 JDK 路径(如
/usr/local/openjdk-11
)别名:JDK11
Maven 配置:
取消 “自动安装”,填写 Maven 路径(如
/usr/share/maven
)别名:Maven3.9.10
点击 “保存”
以下是之前教学的配置:
2. 项目配置步骤
新建项目 → 选择 “自由风格项目”——freestyle-maven
源码管理(复用 Git 配置):
仓库 URL:
ssh://git@192.168.145.129:2222/root/k8s-dashboard.git
凭证:选择之前配置的
gitlab-ssh-cred
构建环境:
勾选 “Provide Node & npm bin/folder to PATH”(如需 Node 环境)
构建步骤:
点击 “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)
构建后操作:
点击 “Add post-build step → Archive the artifacts”
Files to archive:填写
target/*.jar
(归档 JAR 包)
保存后点击 “立即构建”,查看控制台输出
关键日志验证
成功构建会显示:
[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)}}}
}
📌 常见问题排查
Maven 命令找不到:检查全局工具配置中 Maven 路径是否正确
JDK 版本不兼容:在
tools
块指定正确的 JDK 版本- 依赖下载缓慢:在 Maven 配置文件(
settings.xml
)中添加国内镜像:<mirrors><mirror><id>aliyun</id><url>https://maven.aliyun.com/repository/public</url><mirrorOf>central</mirrorOf></mirror> </mirrors>
构建产物未归档:检查 “Files to archive” 路径是否与实际打包路径一致
通过以上三种方式,可根据项目复杂度选择合适的构建方案,结合之前的 Git 认证配置,实现从代码拉取到构建打包的全自动化流程。