在Gitlab-ci中使用submodule
@ wgjak47 | 星期三,一月 9 日,2019 年 | 2 分钟阅读 | 更新于 星期三,一月 9 日,2019 年

背景

在gitlab-ci的场景下,有些项目的持续集成需要引用submodule,一般的git submodule设置并不能满足gitlab-ci的需要,需要一些小的调整。

.gitmodules设置

一、 对于在同一个gitlab服务器的项目使用相对路径,例如:

[submodule "code/base-ui"]
path = code/xxx
url = ssh://git@git-xxxx.xxxx.com/xxxxteam/xxx-ui.git

改为

[submodule "code/base-ui"]
path = code/xxx
url = ../../xxxxteam/xxx-ui.git

这样git在本地pull等操作还是走主repo的协议,例如(ssh,git)等,gitlab会自动转换为https进行获取 二、 对于不同gitlab服务器的项目是用完整的https路径,注意这要求gitlab-runner所在的机器有获取代码的权限

[submodule "code/base-ui"]
path = code/xxx
url = https://git@git-xxxx.xxxx.com/xxxxteam/xxx-ui.git

.gitlab-ci.yml设置

对于gitlab-runner > v1.10,可以直接使用GIT_SUBMOULE_STRATEGY变量来控制,默认值为normal,即只拉取第一层的git submodule,而另一个值为recursive,即只递归拉取所有的submodules,包括submodule的submodule…样例:

variables:
GIT_SUBMODULE_STRATEGY: recursive

如果你的gitlab-runner版本比较低,需要在before_script执行:

before_script:
- git submodule sync --recursive
- git submodule update --init --recursive

效果:

20190109233930.png

参考

https://docs.gitlab.com/ee/ci/yaml/README.html#git-submodule-strategy