GitLab CI 从其他存储库读取文件

m_c*_*ens 3 gitlab gitlab-ci gitlab-ci-runner

在我的设置中,GitLab 中有两个存储库,其中一个有一个版本文件,另一个需要命名由其 CI/CD 管道生成的工件。

现在,我只是克隆整个其他存储库来访问该VERSION文件。我尝试使用git archive仅提取VERSION文件,但CI_JOB_TOKEN不适用于 SSH 访问远程(来自我的测试),并且curl对原始文件路径执行 a操作不起作用,因为它位于私有 GitLab 实例上。

有一个更好的方法吗?

Sam*_*ipp 10

我遇到了同样的问题并通过使用访问令牌解决了它。转到“用户设置” >“访问令牌”并创建一个:

生成访问令牌

使用它,您可以通过gitlab-api从所有存储库中提取文件。

wget --header "PRIVATE-TOKEN: <your_token>" http://mygitlab.com/api/v4/projects/<project_id>/repository/files/path%2Fto%2Ffile/raw?ref=master
Run Code Online (Sandbox Code Playgroud)

要在 GitLab CI 中提取该文件,您可以将访问令牌设置为环境变量。去>设置> CI >环境变量并添加GITLAB_TOKEN您的访问令牌:

添加ci环境变量

您现在可以在 CI 脚本中使用该环境变量来下载该文件,wget或者curl如果您愿意。

wget --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" http://mygitlab.com/api/v4/projects/<project_id>/repository/files/path%2Fto%2Ffile/raw?ref=master
Run Code Online (Sandbox Code Playgroud)

或者

curl --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" http://mygitlab.com/api/v4/projects/<project_id>/repository/files/path%2Fto%2Ffile/raw?ref=master
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,谢谢。只是想补充一点,如果上游项目位于同一实例上,则可以使用内置的 CI 变量 `$CI_API_V4_URL`,如下所示: `curl --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" ${CI_API_V4_URL} /projects/&lt;project_id&gt;/repository/files/path%2Fto%2Ffile/raw?ref=master` (4认同)
  • 但我的 git 仅返回 404 not found on such type of address :( (2认同)

Izy*_*orr 1

我这样做的一种“不太好”的方法是将在我的 GitLab 用户设置中注册的 SSH 密钥放入运行该作业的容器中,这使我可以访问我有权访问的所有存储库。

如果你只需要另一个存储库中的一个文件,我想到的事情(尽管我也不会称其为一个很好的解决方案)是将这个文件保存在 CI 中“其他”存储库中的 GitLab 页面上,然后使用卷曲。