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

时间:2019-02-21 16:18:56

标签: gitlab gitlab-ci gitlab-ci-runner

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

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

有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

一种“不太好”的方式是在运行作业的容器中将已注册的GitLab用户设置SSH密钥放入运行该作业的容器中,从而使我能够访问所有我有权访问的存储库。

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

答案 1 :(得分:0)

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

Generate access token

然后您可以通过gitlab-api从所有存储库中提取文件。

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

要在GitLab CI中提取该文件,可以将访问令牌设置为环境变量。转到 > 设置> CI > 环境变量,并添加GITLAB_TOKEN和访问令牌:< / p>

add ci environment variable

现在,您可以根据需要在CI脚本中使用该环境变量来通过wgetcurl下载该文件。

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

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