18.4.2 构建策略与依赖管理
构建策略与依赖管理的目标是提升构建稳定性、可重复性与交付效率。实践中应区分全量构建与增量构建:全量构建适合里程碑、发布分支和依赖升级;增量构建适合日常提交与快速验证。对于多模块项目,优先采用并行构建与分层缓存,减少重复编译,缩短流水线时间。
构建策略与分支模型示例#
- 主干分支:严格构建与测试,启用制品签名与版本锁定
- 功能分支:快速构建、轻量测试
- 发布分支:固定依赖版本、制品归档
// Jenkinsfile(关键片段)
pipeline {
agent any
options { timestamps() }
stages {
stage('Build') {
steps {
sh 'mvn -B -U -DskipTests=false clean package'
}
}
stage('Archive') {
steps {
archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
}
}
}
}
依赖管理与制品库接入#
使用统一依赖仓库(Nexus/Artifactory)集中管理第三方制品与内部产物,避免“浮动依赖”。
Maven settings.xml 示例(含镜像与私服)
<!-- /etc/maven/settings.xml -->
<settings>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://nexus.ops.local:8081/repository/maven-public/</url>
</mirror>
</mirrors>
<servers>
<server>
<id>nexus-release</id>
<username>deploy</username>
<password>deploy_pass</password>
</server>
</servers>
</settings>
发布制品命令
# 发布快照或正式版本(需在pom.xml中配置distributionManagement)
mvn -B -DskipTests=true deploy
# 预期效果:制品上传到Nexus仓库
锁定依赖(Maven + versions plugin)
# 固定依赖版本,避免动态版本引发不稳定
mvn -B versions:use-releases
mvn -B versions:commit
构建缓存与并行构建示例#
Maven缓存目录挂载(Jenkins Agent)
# 将宿主机的Maven缓存挂载到构建容器
docker run --rm \
-v /opt/jenkins/.m2:/root/.m2 \
-v /opt/workspace:/workspace \
-w /workspace \
maven:3.9-eclipse-temurin-17 \
mvn -B -DskipTests clean package
# 预期效果:依赖复用,构建速度提升
Gradle并行构建
# gradle.properties
org.gradle.parallel=true
org.gradle.caching=true
依赖变更触发全量构建#
# Git Hook / Jenkins Pipeline 中判断依赖文件变更
git diff --name-only HEAD~1 | egrep 'pom.xml|build.gradle|package-lock.json' && echo "Full build required"
安装与配置(示例:Nexus)#
# 安装Nexus(简单示例)
docker run -d --name nexus \
-p 8081:8081 \
-v /opt/nexus-data:/nexus-data \
sonatype/nexus3:latest
# 预期效果:浏览器访问 http://<IP>:8081 可进入Nexus界面
常见排错#
# 依赖下载失败:检查网络与镜像配置
mvn -X -U -DskipTests clean package
# 403/401:检查Nexus账号与settings.xml的server配置
grep -n "nexus-release" -n /etc/maven/settings.xml
# 构建产物缺失:检查Jenkins workspace路径与归档路径
ls -l $WORKSPACE/target
练习#
- 搭建一个Nexus私服,并配置Maven镜像到私服。
- 在Jenkins中创建Pipeline,使用缓存目录构建,并对比构建时长。
- 修改pom.xml的依赖版本,验证触发全量构建逻辑。