背景
在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
效果:
参考
https://docs.gitlab.com/ee/ci/yaml/README.html#git-submodule-strategy