GitLab Runner 11.10.1版本GIT_SUBMODULE_FORCE_HTTPS配置不生效问题咨询
你好,你遇到的这个问题大概率和GitLab Runner 11.10.1的版本局限性有关,我来帮你分析下可能的原因和可行的解决办法:
1. 版本功能支持的问题
GIT_SUBMODULE_FORCE_HTTPS这个环境变量是在GitLab Runner的后续版本中才被完善支持的,11.10.1是2019年发布的老版本,这个版本要么还没完全实现该变量的逻辑,要么存在已知的bug导致配置不生效。根据社区反馈,这个变量的稳定支持是从12.x系列版本开始的,所以老版本不识别这个配置是很可能的。
2. 临时解决办法:手动替换子模块URL
如果暂时没办法升级Runner,你可以在CI的before_script阶段手动修改子模块的远程地址,强制用HTTPS克隆,比如添加这些命令:
# 替换单个子模块的URL为HTTPS格式 git submodule set-url topsim https://gitXXX.XXXXX.com/fpga/topsim.git # 同步所有子模块的URL配置 git submodule sync --recursive # 初始化并更新子模块 git submodule update --init --recursive
这样就能绕开Runner变量不生效的问题,直接强制使用HTTPS地址克隆子模块。
3. 检查.gitmodules文件的原始配置
另外你可以确认下项目根目录的.gitmodules文件里,子模块的URL是不是本来就是SSH格式的。在老版本Runner中,即使设置了GIT_SUBMODULE_FORCE_HTTPS,也可能不会自动替换这个文件里的原始地址,这时候手动修改或者CI中动态替换就更可靠。
你提供的CI配置本身是没问题的:
variables: GIT_CLONE_PATH: $CI_BUILDS_DIR/$CI_CONCURRENT_ID/$CI_PROJECT_PATH/$CI_COMMIT_BRANCH GIT_STRATEGY: fetch GIT_DEPTH: 1 GIT_SUBMODULE_STRATEGY: recursive CI_PROJECT: "" CI_COLLECT_COVERAGE: 0 CI_WHO_LIST: "" CI_TESTLIST: regress_full_list GIT_SUBMODULE_FORCE_HTTPS: "true"
而日志里确实明确显示还是在使用SSH地址克隆,导致权限报错:
Cloning into '/scratch01/fpga_ci7/builds/0/fpga/prime/topsim'...
remote:
remote: ========================================================================
remote:
remote: The project you were looking for could not be found or you don't have permission to view it.
remote:
remote: ========================================================================
remote:
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
fatal: clone of 'git@gitXXX.XXXXX.com:fpga/topsim.git' into submodule path '/scratch01/fpga_ci7/builds/0/fpga/prime/topsim' failed
Failed to clone 'topsim'. Retry scheduled
总结
最彻底的解决方式还是把GitLab Runner升级到12.x及以上的稳定版本,这样就能正常使用GIT_SUBMODULE_FORCE_HTTPS变量了。如果暂时无法升级,上面的手动替换URL的方法应该能解决你的克隆权限问题。
备注:内容来源于stack exchange,提问作者Rich Maes

