在我的设置中,GitLab中有两个存储库,其中一个存储库具有一个版本文件,另一个存储库需要用于命名由其CI / CD管道生成的工件。
现在,我只是克隆整个其他存储库来访问该VERSION
文件。我尝试使用git archive
只提取VERSION
文件,但CI_JOB_TOKEN
不能与SSH访问遥控器(从我的测试),并执行curl
到原始文件路径不起作用,因为它在私人GitLab实例上。
有一个更好的方法吗?
我做的“不太好”的方法是在我的GitLab用户设置中注册SSH密钥,在运行该作业的容器中,这使我可以访问我有权使用的所有repos。
如果你只需要一个来自其他repo事物的文件(虽然我不会称之为一个很好的解决方案)是将这个文件保存在CI中的“其他”仓库中的GitLab页面上然后只是卷曲。
我有同样的问题,并通过使用访问令牌解决它。转到用户设置>访问令牌并创建一个:
然后使用它可以通过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
:
您现在可以在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
要么
curl --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" http://mygitlab.com/api/v4/projects/<project_id>/repository/files/path%2Fto%2Ffile/raw?ref=master