Spring 团队开发者的现状
Spring 社区已经有了几十个项目,其中被广泛使用的是 Spring Framework 和 Spring Boot,Spring Cloud 等等。由于 Spring 项目基本涵盖Java 开发所需要的各种功能,并且有庞大的社区支持,它们被 Java 开发者亲切的称为”Spring 全家桶”。
Spring 项目的开发者分布在全球各地,主要集中在美国,欧洲。每个项目由几个人的开发团队组成,大部分是 Work From Home,没有 QA,没有专门的测试。Spring 项目非常活跃,以 Spring Boot 项目为例,他们在 Github 上的 Star 已经超过13000+,被 Fork 超过11000次。Spring 社区已经有13000+的 Issues 被创建,其中有 Bug,也有用户提的需求和问题。
Spring 项目持续交付的工具链
如此活跃的社区项目,必然有一个优秀的软件交付流水线:
需求变更管理:
Spring Framework 使用 Jira 记录 Issue,Spring Boot 项目使用 Github Issues管理 Issue。
构建管理:
使用 Bamboo 管理构建,使用 JFrog Artifactory 进行包管理。
包管理:
使用 JFrog Bintray 进行发布管理,首先包会被上传到 Bintray 进行首发,再由 Bintray 复制到 MavenCentral。
打包工具
Spring Boot 使用 Maven,Spring Framework 使用 Gradle。
如何让外部人员测试一个 Fix?
通常,社区用户提了 Issue 之后,Spring 团队的开发者会进行修复,提交代码,和单元测试用例,并且执行单元测试。上传 Snapshot 构建到 JFrog Artifactory 后,开发者会告知 Issue 的提交者从 Artifactory 下载最新的 Snapshot 构建来测试是否这次构建解决了问题,这种早期测试的功能非常有用。
如何做到?
Spring 使用 Bamboo + Artifactory 插件,一旦有代码提交,便会触发 Bamboo 的构建。
通过 Artifactory 插件,将包上传到 公网上的 Artifactory 服务器: repo.spring.io。
如果用户需要测试,他只需在 Pom 文件里修改对应的依赖版本,Maven 的客户端会从 Artifactory 服务器取到最新版的构建。
如何做文档管理?
Spring 庞大的社区必须要靠完善的文档作为支持。Spring 团队使用 AsciiDoctor 创建文档。
熟读 Spring Framework 文档的同学都知道,Spring 的文档是可以下载成为 PDF 和 Epub 类型的文件的,方便离线阅读和搜索,这就是用了 AsciiDoctor 实现的。
使用 AsciiDoctor 的另一个好处在于它的可读性非常好,当需要修改文档是,只需 Fork Github 上的文档,修改内容,再提交 Pull Request。
Spring 的文档有 Spring 团队和社区用户共同维护,如何让文档进行实时的更新发布呢?Spring 团队使用 Artifactory 元数据实时发布文档:
首先 Spring 团队将所有的文档打成 Zip 文件上传至 Artifactory,命名方式类似于 ‘Spring-boot-docs.1.3.0.zip’。
用 Cron + Perl 命令将 docs.zip 文件解压并部署到他们的文档服务器。
如何避免重复部署?当 Cron 任务部署了某个 Doc 文件后,会在 Artifactory 里该文件的 Properties 里记录”Deployed=True”,当下次部署时,会过滤带有这种元数据的文档,从而避免重复发布文档。
如何做代码,分支合并
依赖 Pull Request 合并 Feature 分支。合并代码的时候,绝不轻易合并,而是考虑进行代码重构,增加测试用例,修改 Commit Message。
Commit Message 有一些规范:首行大写,第二行空行,并且要包含 Issue 号,这样可以将 Issue 的信息关联到 Bamboo,并且传递到 Artifactory 做包发布的生命周期记录。
Git log 也是极好调试的工具,在 Eclipse/Idea->Annotation 里,可以看到每行代码的最近修改记录,以及对应的 Issue,这样就能知道每行代码修改的原因。
Feature 分支的 Pull Request 被拒绝怎么办?
使用 git commit –amend 修改commit 的 History,进行再次提交,这样保证每个 Bug 的修复是一次变更,而不是挂着一堆变更。目前社区也有专门的工具做 Feature 分支开发的管理,例如 Gerrit。
Spring 项目如何做发布?
Spring 项目维护两个环境,Staging 和 Release 环境。80%的项目使用 Bamboo + Artifactory 进行发布。发布流程如下:
创建 Release Branch。
构建加测试。
在 Git 里执行 Tag。
将包部署到 Staging 环境。
升级到下一个版本。
一键发布到 JFrog Bintray。
修改 Spring.io 中的版本。
Spring 开发者的总结
尽量使用开源项目。
降低项目启动和配置的难度,这样你的开发者会更容易的上手。
使用 Git Branch 进行项目的迭代,基于 Feature 分支的开发,每次提交必须是一个最小的可测试单元。
在 Staging 环境里做测试,并且提供回滚的策略。
投资工具!
这样的开发流程特别适合微服务的开发。