需求描述
在 上一篇文章 中,我简单描述了我们一个项目的复杂程度:子模块、嵌套子模块、多分支。除了工程分支切换上的复杂,我们还遇到另一个问题:子模块持续集成。
主工程持续集成
先说说主工程如何做持续集成。我们使用 Gitlab 自带的 Gitlab-Ci 作为我们的持续集成系统。Android 端的主工程的持续集成脚本如下:
1 2 3 4 5 6 7 8
| build: tags: - android script: - ./fmanager checkout -f $CI_BUILD_REF_NAME - ./fmanager update - gradle clean - gradle aR
|
其中, CI_BUILD_REF_NAME
指定要编译哪个分支的主工程。当我们推送代码到某个分支时,该分支下的持续集成脚本就会被调用,CI_BUILD_REF_NAME
变量就会是那个分支的名字。在执行构建前,先用 fmanager 完成主工程和所有模块的分支切换 ,之后再用 fmanager 更新整个项目的代码。最后再执行编译指令。
Read More
需求描述
我们尝试使用 Git 来维护一个项目的代码。这个项目的结构比较复杂:
- 项目包含由多个子模块,每个子模块是一个独立的 Git 仓库,子模块还允许继续嵌套包含子模块。 例如,主工程依赖 common、framework、react_native 等多个子模块,而 react_native 子模块又依赖 node_modules、HFCommon、HFModules 等多个嵌套子模块。
1 2 3 4 5 6 7 8 9 10 11
| [-] app_android/ |-[+] HFUIKit |-[+] channel |-[+] common |-[+] framework |-[+] hybrid |-[+] messagecenter |-[-] react_native |-[+] HFCommon |-[+] HFModules |-[+] node_modules
|
- 主工程和子模块允许存在多个分支,且相互之间有依赖关系。例如,主工程的 jilin 分支同时依赖 common 子模块的 master 分支,以及 framework 子模块的 jilin 分支。
Read More