gitlab - 任何人都可以发布具有外部子模块的 GitLab CI 的工作示例吗?

我正在尝试让 gitlab 的 CI 与外部子模块一起正常工作。

  • 我在另一个存储库中有一个子模块,所以没有相对路径。
  • 我不想使用 SSH key 解决方案。
  • 我想使用 CI token (CI_JOB_TOKEN)。

文档不明确,因为什么是可能的,什么是不可能的,已经改变了,到处都是文本,有许多不同的方法,但没有一个符合基本标准。

过去,如果子模块有绝对路径,则无法使用 CI 拉取子模块,因此人们想出了各种解决方案。然后它成为可能,并且有一些关于身份验证问题的解决方案。 但它们都涉及做一个不再需要的克隆,因为现在我们可以设置 CI 来做一个递归池。

这意味着大多数在线帖子都变得无关紧要和过时了,答案到处都是,但几个小时后,没有一个对我有用。变量: GIT_SUBMODULE_STRATEGY:递归

有用的是创建一个全局管理 key ,允许访问所有内容,但这根本不是一个好的解决方案。

我现在拥有的是:

variables:
  GIT_SUBMODULE_STRATEGY: recursive

before_script:
- git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/".insteadOf "git@gitlab.com:"
- git submodule sync && git submodule update --init

其中,根据Getting GitLab CI to clone private repositories应该可以。

但它失败了:

fatal: could not read Username for 'https://gitlab.com': No such device or address

最佳答案

我设置了 GIT_SUBMODULE_STRATEGY: none 并重写了子模块 URL,以使用 HTTPS 和创建的访问/部署 token ,仅允许读取子模块的存储库。在 .gitlab-ci.yaml 中是这样的:

image: docker:stable

variables:
  GIT_STRATEGY: clone
  # don't clone submodules by default
  GIT_SUBMODULE_STRATEGY: none

someJob:
  tags:
    - docker-priv
  before_script:
    - apk update
    - apk add git
    - git --version
    - git config --global url."https://${ACCESS_TOKEN_XYZ_NAME}:${ACCESS_TOKEN_XYZ}@GITLAB-HOST/GROUP/XYZ.git".insteadOf git@GITLAB-HOST/GROUP/XYZ.git
    - git config --global url."https://${ACCESS_TOKEN_XYZ_NAME}:${ACCESS_TOKEN_XYZ}@GITLAB-HOST/GROUP/XYZ.git".insteadOf https://GITLAB-HOST/GROUP/XYZ.git
    - git submodule sync --recursive
    - git submodule update --init --recursive

请注意,gitlab 中部署 token 的默认名称使用 + 符号,因此在存储为 CI 变量以供上述使用时需要进行 url 编码。您可以使用一个变量 (gitlab%2Breadonly-token-name-123:randomtokenvalue) 而不是两个,以使其更易于阅读。

https://stackoverflow.com/questions/58040183/

相关文章:

ios - 使用 `xcodebuild` 归档时 CompileSwift 正常 arm64

php - 自定义集合操作和IRI转换问题

reactjs - 在 Kafka 上 react GUI

jenkins - 如何在参数化的 Jenkins 管道项目中检索作业名称

c++ - 配置:错误:C++ 预处理器 "/lib/cpp"完整性检查失败

regex - 如何按名称访问捕获组?

html - 有没有一种方法可以确保在 print 语句中使用 kable 表时 unicode 符

php - 尽管使用了有效 key ,Gnupg 仍给出 "get_key failed"

laravel-5 - Phpspreadsheet 四舍五入帐号并从开始删除 0

r - ChordDiagram 切断长标签