Jenkins入门教程(十):使用Jenkins构建Java/Maven项目
Java是企业应用最常用的语言之一,本文将详细介绍如何使用Jenkins构建Maven管理的Java项目,包括完整的Pipeline示例和执行过程。
配置Maven
在全局工具配置中添加Maven安装:
- 进入系统管理 > 全局工具配置
- 找到Maven部分,点击新增Maven
- 名称:Maven3
- 选择自动安装或指定MAVEN_HOME路径
完整Maven构建Pipeline
pipeline {
agent any
tools {
maven 'Maven3'
jdk 'JDK17'
}
environment {
MAVEN_OPTS = '-Xmx1024m'
}
stages {
stage('Checkout') {
steps {
git branch: 'main', url: 'https://github.com/spring-projects/spring-petclinic.git'
}
}
stage('Check Environment') {
steps {
sh '''
echo "=== Java Version ==="
java -version
echo ""
echo "=== Maven Version ==="
mvn -version
echo ""
echo "=== Environment Variables ==="
echo "JAVA_HOME: $JAVA_HOME"
echo "M2_HOME: $M2_HOME"
echo "MAVEN_OPTS: $MAVEN_OPTS"
'''
}
}
stage('Clean') {
steps {
sh 'mvn clean'
}
}
stage('Compile') {
steps {
sh 'mvn compile'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
post {
always {
junit testResults: 'target/surefire-reports/*.xml', allowEmptyResults: true
}
}
}
stage('Package') {
steps {
sh 'mvn package -DskipTests'
// 显示构建产物
sh '''
echo "=== Build Artifacts ==="
ls -lh target/*.jar
'''
}
}
stage('Archive') {
steps {
archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
}
}
}
post {
success {
echo 'Maven build completed successfully!'
}
failure {
echo 'Maven build failed!'
}
}
}
执行结果示例
[Pipeline] stage
[Pipeline] { (Check Environment)
[Pipeline] sh
+ echo '=== Java Version ==='
=== Java Version ===
+ java -version
openjdk version "17.0.9" 2023-10-17
OpenJDK Runtime Environment (build 17.0.9+9)
OpenJDK 64-Bit Server VM (build 17.0.9+9, mixed mode, sharing)
+ echo '=== Maven Version ==='
=== Maven Version ===
+ mvn -version
Apache Maven 3.8.7 (b89d5959fcde851dcb1c8946a785a163f14e1e29)
Maven home: /var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/Maven3
Java version: 17.0.9, vendor: Eclipse Adoptium
...
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] sh
+ mvn test
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building petclinic 3.0.0
[INFO] ------------------------------------------------------------------------
[INFO] --- maven-surefire-plugin:3.0.0:test (default-test) @ spring-petclinic ---
[INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running org.springframework.samples.petclinic.PetclinicIntegrationTests
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 5.123 s
[INFO] Running org.springframework.samples.petclinic.owner.OwnerControllerTests
[INFO] Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.234 s
...
[INFO] Results:
[INFO]
[INFO] Tests run: 42, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[Pipeline] stage
[Pipeline] { (Package)
[Pipeline] sh
+ mvn package -DskipTests
[INFO] Building jar: /var/lib/jenkins/workspace/maven-demo/target/spring-petclinic-3.0.0.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
+ echo '=== Build Artifacts ==='
=== Build Artifacts ===
+ ls -lh target/*.jar
-rw-r--r-- 1 jenkins jenkins 48M Feb 8 12:30 target/spring-petclinic-3.0.0.jar
使用Docker构建Maven项目
使用Docker容器提供Maven环境,更加一致和可控:
pipeline {
agent {
docker {
image 'maven:3.8-openjdk-17'
args '-v $HOME/.m2:/root/.m2' // 缓存依赖
}
}
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
}
}
配置Maven仓库
使用configFileProvider配置自定义settings.xml:
pipeline {
agent any
stages {
stage('Build with Custom Settings') {
steps {
configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
sh 'mvn -s $MAVEN_SETTINGS clean deploy'
}
}
}
}
}
代码覆盖率报告
集成JaCoCo生成代码覆盖率报告:
pipeline {
agent any
stages {
stage('Test with Coverage') {
steps {
sh 'mvn clean verify -Pcoverage'
}
post {
always {
junit 'target/surefire-reports/*.xml'
// JaCoCo覆盖率报告
jacoco(
execPattern: 'target/jacoco.exec',
classPattern: 'target/classes',
sourcePattern: 'src/main/java',
exclusionPattern: 'src/test*'
)
}
}
}
}
}
pom.xml中配置JaCoCo插件:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.10</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
并行构建加速
使用Maven的并行构建选项加速:
# 使用4个线程并行构建
mvn -T 4 clean install
# 每个CPU核心一个线程
mvn -T 1C clean install
# 在Pipeline中
sh 'mvn -T 1C clean package -DskipTests'
发布到Nexus/Artifactory
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('Deploy to Nexus') {
when {
branch 'main'
}
steps {
withCredentials([usernamePassword(
credentialsId: 'nexus-creds',
usernameVariable: 'NEXUS_USER',
passwordVariable: 'NEXUS_PASS'
)]) {
sh '''
mvn deploy \
-DskipTests \
-DaltDeploymentRepository=nexus::default::https://nexus.example.com/repository/maven-releases/ \
-Dusername=$NEXUS_USER \
-Dpassword=$NEXUS_PASS
'''
}
}
}
}
}
常用Maven命令
# 常用Maven生命周期命令
mvn clean # 清理target目录
mvn compile # 编译源代码
mvn test # 运行单元测试
mvn package # 打包(JAR/WAR)
mvn verify # 运行集成测试
mvn install # 安装到本地仓库
mvn deploy # 部署到远程仓库
# 常用选项
mvn -DskipTests # 跳过测试
mvn -Dmaven.test.skip=true # 跳过测试编译和执行
mvn -U # 强制更新依赖
mvn -o # 离线模式
mvn -X # 调试模式
总结
本文详细介绍了使用Jenkins构建Maven项目的完整流程,包括环境配置、测试报告、代码覆盖率、并行构建等内容。
下一篇我们将学习使用Jenkins构建前端项目。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







