持续集成

1. 什么是持续集成?

持续集成(Continuous Integration) 是软件开发越来越普遍的一种优秀实践,即团队开发成员经常集成他们的工作,通常每天新完成的代码至少集成一次,也就意味着每天可能会发生多次集成。

通常系统集成都会采用持续集成的策略,这样就没有必要讨论那些”自顶向下、自底向上、三明治”等传统的集成策略了。

2. Martin Fowler 论持续集成

“Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible.”

—— Martin Fowler http://martinfowler.com/articles/continuousIntegration.html

3. 如何做好持续集成?

10条核心原则

  1. 维护单一源代码仓库 (Maintain a Single Source Repository)
  2. 自动化构建 (Automate the Build)
  3. 让构建自测试 (Make Your Build Self-Testing)
  4. 每人每天向主干提交代码 (Everyone Commits To the Mainline Every Day)
  5. 每次提交都应在集成机器上构建主干 (Every Commit Should Build the Mainline on an Integration Machine)
  6. 立即修复构建失败 (Fix Broken Builds Immediately)
  7. 保持构建快速 (Keep the Build Fast)
  8. 在生产环境的克隆环境中测试 (Test in a Clone of the Production Environment)
  9. 让任何人可以轻松获取最新可执行文件 (Make it Easy for Anyone to Get the Latest Executable)
  10. 每个人都能看到正在发生的事情 (Everyone can see what’s happening)
  11. 自动化部署 (Automate Deployment)

4. 持续集成环境组成

4.1 源代码管理工具

  • SVN (Subversion)
  • Git - GitHub、Gitee、GitLab

4.2 版本构建工具

  • Maven - Java项目构建工具
    • 自动解决项目依赖
    • 自动化构建

4.3 持续集成管理工具

  • Jenkins - 最流行的开源持续集成工具
    • 自动从代码仓库拉取最新代码
    • 自动化部署
    • 可视化界面

5. 持续集成流程

开发者提交代码 → Git仓库 → Jenkins触发构建 → 
编译 → 自动化测试 → 构建成功 → 
自动部署到测试环境 → 测试验证 → 
自动部署到生产环境

6. Jenkins 持续集成实战

6.1 Jenkins 安装

  1. 下载 Jenkins war 包
  2. 部署到 Tomcat 的 webapps 目录
  3. 访问 http://localhost:8080/jenkins
  4. 安装推荐插件

6.2 Jenkins 自动化部署流程

  1. 创建 Jenkins 任务
  2. 配置 Git 源码管理 - 填写 GitHub/GitLab 仓库地址
  3. 配置构建触发器 - 如代码提交自动触发
  4. 编写 Shell 构建脚本 - 自动化部署

6.3 典型部署脚本示例

#!/usr/bin/env bash
 
# 编译项目
cd $PROJ_PATH/project-name
mvn clean install
 
# 停止旧服务
$TOMCAT_APP_PATH/bin/shutdown.sh
 
# 删除旧部署
rm -rf $TOMCAT_APP_PATH/webapps/ROOT
rm -f $TOMCAT_APP_PATH/webapps/ROOT.war
 
# 复制新部署
cp $PROJ_PATH/project-name/target/project.war $TOMCAT_APP_PATH/webapps/ROOT.war
 
# 启动服务
$TOMCAT_APP_PATH/bin/startup.sh

7. 持续集成的好处

  • 快速发现错误 - 每次集成都会自动运行测试
  • 减少集成风险 - 频繁集成,小步前进
  • 提高软件质量 - 自动化测试确保代码质量
  • 加快发布速度 - 自动化部署减少人工操作
  • 团队协作更高效 - 随时可以看到最新代码状态

8. 持续集成相关工具

类别工具
版本控制Git, SVN
构建工具Maven, Gradle, Ant
CI服务器Jenkins, Travis CI, CircleCI, GitLab CI
容器化Docker, Kubernetes
代码质量SonarQube, Checkstyle, PMD