gitlab - 从 GitLab 工件存档下载单个文件
问题描述
我正在运行 GitLab CE 11.5.0,我的一项工作产生了一个工件,我想从中下载一个文件。
将完整的工件存档下载为 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
现在我只想从该存档中下载一个文件,如此处所述。
$ 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 的文档。您需要对工件路径和项目 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"
这个答案有一个 urlencode 函数的 bash 实现。
推荐阅读
- javascript - sourceMappingURL 在浏览器中被缩短
- java - 使用 Jackson 反序列化 Java 中的 JSON
- haskell - maxTotalHeaderLength 是否按预期工作?
- java - Android Studio 无法为 android 执行方法:onClick
- julia - 将 SuiteSparse.SPQR.QRSparseQ 转换为 SparseMatrixCSC?
- javascript - “this”指的是在方法内部定义的 IIFE 内部定义的内部箭头函数?
- javascript - 如何在 lightgallery onCloseAfter.lg 方法中调用 js 函数?
- encryption - 密码反馈模式:s 位大小混淆
- xamarin.forms - 带有圆形中央按钮的 Xamarin Forms 导航栏
- python - 是否有一种可接受的 Pythonic 方式将基类部分与子类对象分离?