持续集成
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条核心原则
- 维护单一源代码仓库 (Maintain a Single Source Repository)
- 自动化构建 (Automate the Build)
- 让构建自测试 (Make Your Build Self-Testing)
- 每人每天向主干提交代码 (Everyone Commits To the Mainline Every Day)
- 每次提交都应在集成机器上构建主干 (Every Commit Should Build the Mainline on an Integration Machine)
- 立即修复构建失败 (Fix Broken Builds Immediately)
- 保持构建快速 (Keep the Build Fast)
- 在生产环境的克隆环境中测试 (Test in a Clone of the Production Environment)
- 让任何人可以轻松获取最新可执行文件 (Make it Easy for Anyone to Get the Latest Executable)
- 每个人都能看到正在发生的事情 (Everyone can see what’s happening)
- 自动化部署 (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 安装
- 下载 Jenkins war 包
- 部署到 Tomcat 的 webapps 目录
- 访问 http://localhost:8080/jenkins
- 安装推荐插件
6.2 Jenkins 自动化部署流程
- 创建 Jenkins 任务
- 配置 Git 源码管理 - 填写 GitHub/GitLab 仓库地址
- 配置构建触发器 - 如代码提交自动触发
- 编写 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.sh7. 持续集成的好处
- 快速发现错误 - 每次集成都会自动运行测试
- 减少集成风险 - 频繁集成,小步前进
- 提高软件质量 - 自动化测试确保代码质量
- 加快发布速度 - 自动化部署减少人工操作
- 团队协作更高效 - 随时可以看到最新代码状态
8. 持续集成相关工具
| 类别 | 工具 |
|---|---|
| 版本控制 | Git, SVN |
| 构建工具 | Maven, Gradle, Ant |
| CI服务器 | Jenkins, Travis CI, CircleCI, GitLab CI |
| 容器化 | Docker, Kubernetes |
| 代码质量 | SonarQube, Checkstyle, PMD |