【问题标题】:GitLab CI Read File from Other RepositoryGitLab CI 从其他存储库读取文件
【发布时间】:2019-02-21 16:18:55
【问题描述】:

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

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

有没有更好的方法来做到这一点?

【问题讨论】:

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


    【解决方案1】:

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

    使用它,您可以通过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 脚本中使用该环境变量来通过 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
    

    【讨论】:

    • 很好的答案,谢谢。只是想补充一点,如果上游项目在同一个实例上,您可以使用烘焙的 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
    • 但是我的 git 只返回了 404 在这种类型的地址上找不到:(
    • 我必须补充一点,在文件路径中,所有斜杠必须用 %2F 转义。因此,如果您的文件路径是“myfolder/lala.txt”,则 url 为:${CI_API_V4_URL}/projects//repository/files/myfolder%2Flala.txt/raw?ref=master
    【解决方案2】:

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

    如果您只需要另一个 repo 中的一个文件,我想到的事情(尽管我也不认为这是一个很好的解决方案)是将此文件保存在 CI 中“其他”repo 中的 GitLab 页面上,然后只需使用 curl 获取它。

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 2020-11-03
      • 2021-04-02
      • 2019-10-09
      • 1970-01-01
      相关资源
      最近更新 更多