从 GitLab 工件存档下载单个文件
Posted
技术标签:
【中文标题】从 GitLab 工件存档下载单个文件【英文标题】:Download a single file from GitLab artifacts archive 【发布时间】: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 文件,但我认为这不应该有所作为。
谁能帮忙?
【问题讨论】:
【参考方案1】:gitlab 的文档应该改进。您需要对 artifact path 和 project 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 实现。
【讨论】:
以上是关于从 GitLab 工件存档下载单个文件的主要内容,如果未能解决你的问题,请参考以下文章
如何创建一个工件,以便它可以在 .gitlab-ci.yml 中下载
如何在 .gitlab-ci.yml 中指定通配符工件子目录?
如何为 GitLab CI 运行器启用 Maven 工件缓存?