Откройте файл непосредственно из частного хранилища GitLab

У меня есть частный репозиторий на сервере GitLab и с помощью SSH я могу вытащить проект с помощью git clone.

Но я хочу запустить script в командной строке linux непосредственно с сервера (более конкретно, файл Drupal/Drush.make)

Я попытался запустить его с помощью необработанного файла:

drush make http://server.com/user/project/raw/master/file.make

(для удобства пользователей без Drupal можно сказать)

curl http://server.com/user/project/raw/master/file.make

Без успеха. Конечно, он возвращает мне страницу входа.

Возможно ли это?

Ответ 1

С ценной помощью Криса, вот как вы можете запустить скрипт (файл drupal.make в моем случае) с сервера GitLab. (Возможно, это работает для GitHub, но я не тестировал его. Возможно, синтаксис будет немного другим). (Конечно, это работает для любого типа сценария)

Это можно сделать с помощью токенов аутентификации. Вот документация по GitLab API и вот GitHub API

Для удобства я буду использовать https://gitlab.com в качестве примера сервера.

  • Перейдите на https://gitlab.com/profile/account и найдите свой "личный токен"

  • Затем распечатайте список проектов и найдите идентификатор вашего проекта, который вы ищете

    curl https://gitlab.com/api/v3/projects?private_token=<your_private_token>

    или зайдите туда с вашим браузером (просмотрщик json очень поможет)

  • Затем распечатайте список файлов этого проекта и найдите идентификатор файла, который вы ищете.

    curl https://gitlab.com/api/v3/projects/<project_id>/repository/tree?private_token=<your_private_token>

  • Наконец получить/запустить файл!

    curl https://gitlab.com/api/v3/projects/<project_id>/repository/raw_blobs/<file_id>?private_token=<your_private_token>

Если вы хотите запустить скрипт (drupal.make)

drush make https://gitlab.com/api/v3/projects/<project_id>/repository/raw_blobs/<file_id>?private_token=<your_private_token> <drupal_folder>

(Если вы ищете рабочий процесс для интеграции GitLab с платформами Aegir.make без использования токенов (может быть, SSH?), Пожалуйста, создайте тему и вставьте сюда ссылку.)

РЕДАКТИРОВАТЬ

Вы можете получить файл без project_id проекта, используя закодированное имя проекта. Например, my-user-name/my-project будет иметь вид: my-user-name%2Fmy-project

Ответ 2

Обновление 2018-12-25:

до тех пор, пока вы не загружаете огромные файлы, это должно работать:

curl -s -H "Private-Token: <token>" "https://gitlab.com/api/v4/projects/<urlencode("gitlab_username/project_name")>/repository/files/<path/to/file>/raw?ref=<branch_name>"

реальный пример - загрузка файла /README.md из частного хранилища https://gitlab.com/divinity76/Yur17, где URL-адрес загрузки в Интернете - https://gitlab.com/divinity76/Yur17/raw/master/README.md?inline=false, это:

curl -s -H "Private-Token: afF2s1xgk6xcwXHy3J4C" "https://gitlab.com/api/v4/projects/divinity76%2Fyur17/repository/files/README%2Emd/raw?ref=master"

обратите особое внимание на то, как gitlab_username/repo_name было закодировано в url, например, / стало %2F (вы можете проверить, как ваше имя пользователя и имя репо закодированы как url, открыв терминал браузера javascript и напишите encodeURIComponent("your_username/repo_name"); в терминале и нажмите ввод.)

спасибо Jonathan Hall @gitlab по адресу mg.gitlab.com и https://docs.gitlab.com/ee/api/repository_files.html, а также tvl за помощь в поиске решения.



Обновление 2018-12-11: этот метод больше не работает, теперь он просто обслуживает страницу входа, с сообщением о need to log in to continue, даже используя HTTP 200 OK (позор им), обновится, если я выясню, почему (@XavierStuvw утверждает, что это связано с проблемами безопасности)



я нашел гораздо более простой способ сделать это, чем ответ @tvl,

сначала создайте токен доступа с доступом API здесь: https://gitlab.com/profile/personal_access_tokens, затем выполните:

wget --header 'PRIVATE-TOKEN: <token>' 'https://gitlab.com/<username>/<repo>/raw/master/path/to/file.ext'

Я нашел решение здесь.