【问题标题】:Download a single file from GitLab artifacts archive从 GitLab 工件存档下载单个文件
【发布时间】:2019-07-14 02:51:21
【问题描述】:

我正在运行 GitLab CE 11.5.0,我的一项工作产生了一个工件,我想从中下载一个文件。

按照here 的描述将完整的工件存档下载为 zip 文件:

$ export TOKEN="12345678"
$ export GITLAB_HOST="gitlab.example.com"
$ export PROJECT_ID="foo"
$ export JOB_NAME="bundle"
$ curl --header "PRIVATE-TOKEN: $TOKEN" \
  "https://$GITLAB_HOST/api/v4/projects/$PROJECT_ID/jobs/artifacts/master/download?job=$JOB_NAME" -o artifacts.zip

存档内容如下所示:

$ unzip -l artifacts.zip
Archive:  artifacts.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
   262107  02-18-2019 16:17   build/ui-bundle.zip
---------                     -------
   262107                     1 file

现在我只想从该存档中下载一个文件,如 here 所记录的那样。

$ export FILE_PATH="build/ui-bundle.zip"
$ curl --header "PRIVATE-TOKEN: $TOKEN" \
  "https://$GITLAB_HOST/api/v4/projects/$PROJECT_ID/jobs/artifacts/master/raw/$FILE_PATH?job=$JOB_NAME"

但是Gitlab好像找不到请求的文件:

{"error":"404 Not Found"}

我意识到工件存档是一个 zip 文件,其中只包含一个嵌入的 zip 文件,但我认为这不应该有所作为。

谁能帮忙?

【问题讨论】:

    标签: gitlab gitlab-ci gitlab-api


    【解决方案1】:

    gitlab 的文档应该改进。您需要对 artifact pathproject id 进行 urlencode:

    $ export TOKEN="12345678"
    $ export GITLAB_HOST="gitlab.example.com"
    $ export PROJECT_ID="foo"
    $ export URLENCODED_PROJECT_ID="foo"
    $ export JOB_NAME="bundle"
    $ export FILE_PATH="build/ui-bundle.zip"
    $ export URLENCODED_FILE_PATH="build%2Fui-bundle.zip"
    $ curl --header "PRIVATE-TOKEN: $TOKEN"\
      "https://$GITLAB_HOST/api/v4/projects/$URLENCODED_PROJECT_ID/jobs/artifacts/master/raw/$URLENCODED_FILE_PATH?job=$JOB_NAME"
    

    This answer 有一个用于 urlencode 函数的 bash 实现。

    【讨论】:

      猜你喜欢
      • 2016-02-06
      • 2016-10-29
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多