Откройте файл непосредственно из частного хранилища 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'
Я нашел решение здесь.