我有一个使用 GitLab CI 的 GitLab 项目。 该项目还使用子模块,该项目及其子模块都在同一个 GitLab 帐户下。
这是我的
.gitmodules
文件
[submodule "proto_contracts"]
path = proto_contracts
url = https://gitlab.com/areller/proto_contracts.git
我在 .gitlab-ci.yml 文件中也有这一部分
variables:
GIT_SUBMODULE_STRATEGY: recursive
但是,当我运行 CI 时,我收到此错误
fatal: could not read Username for 'https://gitlab.com': No such device or address
项目和子模块都位于私有存储库中,因此您可能会收到进行身份验证的提示,但正如我所提到的,项目和子模块位于同一帐户下,运行程序的工作之一是克隆原始版本存储库
所以奇怪的是它无法到达子模块 有办法解决吗?
您必须对子模块使用相对 URL。按如下方式更新您的
.gitmodules
:
[submodule "proto_contracts"]
path = proto_contracts
url = ../../areller/proto_contracts.git
多年来,Gitlab 的情况发生了一些变化,但这些说明到目前为止对我有用。
在 .gitmodules 文件中使用 绝对 URL 是完全可以的(甚至是鼓励的)。
将以下内容添加到您的
.gitlab-ci.yml
文件中以配置运行器:
variables:
GIT_SUBMODULE_STRATEGY: recursive
GIT_SUBMODULE_FORCE_HTTPS: "true"
这告诉 Gitlab 将任何
[email protected]/...
URL 转换为其 https://
等效项,然后自动使用 CI_JOB_TOKEN 来访问子模块所在的存储库。
只要触发管道作业的用户可以访问“主”和子模块存储库,运行程序就应该拥有它现在需要的所有访问权限,希望您应该获得成功的管道运行! :).