Скачать один файл из архива артефактов GitLab - PullRequest
0 голосов
/ 20 февраля 2019

Я использую 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-файл, но я предполагаю, что это не должно иметь никакого значения.

Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 08 мая 2019

Документация gitlab должна быть улучшена.Вам необходимо 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"

Этот ответ имеет реализацию bash для функции urlencode.

...