GitLab 在 CI 中拉取子模块

问题描述 投票:0回答:2

我有一个使用 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

项目和子模块都位于私有存储库中,因此您可能会收到进行身份验证的提示,但正如我所提到的,项目和子模块位于同一帐户下,运行程序的工作之一是克隆原始版本存储库

所以奇怪的是它无法到达子模块 有办法解决吗?

gitlab git-submodules gitlab-ci gitlab-ci-runner
2个回答
28
投票

您必须对子模块使用相对 URL。按如下方式更新您的

.gitmodules

    [submodule "proto_contracts"]
        path = proto_contracts
        url = ../../areller/proto_contracts.git

进一步阅读:在 GitLab CI 中使用 Git 子模块 |亚搏体育appGitLab文档


0
投票

多年来,Gitlab 的情况发生了一些变化,但这些说明到目前为止对我有用。

  1. 在 .gitmodules 文件中使用 绝对 URL 是完全可以的(甚至是鼓励的)。

  2. 将以下内容添加到您的

    .gitlab-ci.yml
    文件中以配置运行器:

variables:
  GIT_SUBMODULE_STRATEGY: recursive
  GIT_SUBMODULE_FORCE_HTTPS: "true"

这告诉 Gitlab 将任何

[email protected]/...
URL 转换为其
https://
等效项,然后自动使用 CI_JOB_TOKEN 来访问子模块所在的存储库。

  1. 运行者不会自动访问其他存储库。您需要转到子模块存储库并授予该访问权限。单击下面屏幕截图中所示的“添加项目”,然后输入依赖于子模块的存储库的路径。

只要触发管道作业的用户可以访问“主”和子模块存储库,运行程序就应该拥有它现在需要的所有访问权限,希望您应该获得成功的管道运行! :).

© www.soinside.com 2019 - 2024. All rights reserved.