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

练习#

  1. 搭建一个Nexus私服,并配置Maven镜像到私服。
  2. 在Jenkins中创建Pipeline,使用缓存目录构建,并对比构建时长。
  3. 修改pom.xml的依赖版本,验证触发全量构建逻辑。