18.4.1 CI流程概览与阶段划分

在持续集成(CI)中,流程的核心目标是以最小的反馈周期将代码变更转化为可验证、可交付的制品,并通过自动化质量门禁降低缺陷流入后续环境。合理划分阶段有助于并行化、可观测与可回滚。

CI流程核心原则
- 小批量、频繁提交:减少合并风险,提升定位效率
- 快速反馈:优先保证构建与基础测试在最短时间完成
- 一致性与可复现:同一提交在不同环境产出一致制品
- 质量门禁前置:越早失败越低成本
- 全程可追溯:提交、构建、测试、制品与部署链路绑定

CI流程原理草图(阶段与数据流)

文章图片

典型阶段划分
1. 触发与准备阶段
完成代码检出、依赖缓存、版本号计算、环境变量注入、凭据加载等。
2. 构建阶段
执行编译、打包、镜像构建等,输出构建元数据(提交哈希、分支、构建号、构建时间、依赖清单)。
3. 测试阶段
单元测试、静态检查、代码规范校验、安全扫描与覆盖率统计。失败即阻断后续阶段。
4. 制品管理阶段
制品库进行存储、版本化与权限控制,并记录制品与提交的映射关系。
5. 结果汇总与通知阶段
汇总构建结果、测试报告、制品信息到通知渠道,支持审计与追踪。

安装与准备示例(以Jenkins Agent构建环境为例)

说明:本节仅给出构建机基础工具安装,完整Jenkins安装见“架构与安装部署”章节。

# Ubuntu/Debian: 安装构建依赖(Git+JDK+Maven+Docker)
sudo apt-get update
sudo apt-get install -y git openjdk-17-jdk maven docker.io

# 验证版本(确保命令可执行)
git --version        # 输出Git版本
java -version        # 输出JDK版本
mvn -version         # 输出Maven版本
docker --version     # 输出Docker版本

流水线示例(最小可执行)

说明:展示阶段划分与门禁,含制品上传与报告归档。

// Jenkinsfile (放在仓库根目录)
pipeline {
  agent any
  environment {
    APP_NAME = "demo-app"
    MVN_OPTS = "-Dmaven.test.failure.ignore=false"
  }
  stages {
    stage('准备') {
      steps {
        sh 'git rev-parse --short HEAD > GIT_COMMIT_SHORT'
        sh 'cat GIT_COMMIT_SHORT'
      }
    }
    stage('构建') {
      steps {
        sh 'mvn -B clean package ${MVN_OPTS}'
      }
    }
    stage('测试') {
      steps {
        sh 'mvn -B test'
      }
      post {
        always {
          junit 'target/surefire-reports/*.xml'
        }
      }
    }
    stage('制品管理') {
      steps {
        sh '''
          ls -l target/*.jar
          # 示例:上传到制品库(此处用curl演示,需替换URL/凭据)
          curl -u user:pass -T target/*.jar \
            http://nexus.example.com/repository/releases/${APP_NAME}/
        '''
      }
    }
  }
  post {
    success {
      echo "CI成功:制品已生成并入库"
    }
    failure {
      echo "CI失败:请检查构建/测试日志"
    }
  }
}

关键命令解释(与流程对应)
- git rev-parse --short HEAD:生成提交短哈希,写入元数据
- mvn clean package:编译并打包,产出target/*.jar制品
- mvn test:运行单元测试,失败即中断流水线
- junit 'target/surefire-reports/*.xml':归档测试报告
- curl -u user:pass -T:上传制品到Nexus/制品库

常见排错清单(按阶段定位)
- 触发/准备失败:检查Webhook、凭据ID、Git权限
- 构建失败:检查JDK/Maven版本、依赖库下载失败
- 例:Could not resolve dependencies → 配置代理或私服
- 测试失败:查看target/surefire-reports报告
- 制品上传失败:核对制品库地址、权限、仓库路径
- 资源不足:日志中出现No space left on device → 清理工作空间

练习
1. 在示例流水线中新增“静态检查”阶段(如mvn -B checkstyle:check)。
2. 将制品上传改为使用Harbor镜像仓库(构建Docker镜像并push)。
3. 让测试阶段并行执行(单测与静态扫描并行)。

通过清晰的阶段划分与门禁策略,CI流程能够稳定地为后续CD提供高质量、可追溯的交付基础。