web-dev-qa-db-fra.com

Ouvrir un fichier directement à partir d'un référentiel privé GitLab

J'ai un référentiel privé sur un serveur GitLab et, en utilisant SSH, je peux extraire un projet en utilisant git clone.

Mais je veux exécuter un script sur la ligne de commande linux directement à partir du serveur (plus spécifique, un fichier Drupal/Drush .make)

J'ai essayé de l'exécuter en utilisant le fichier brut:

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

(pour la commodité des utilisateurs non Drupal, disons)

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

Sans succès. Bien sûr, il me renvoie la page de connexion.

C'est possible?

15
tvl

Avec l'aide précieuse de Chris , voici comment exécuter un script (le fichier drupal .make dans mon cas) à partir d'un serveur GitLab. (Cela fonctionne probablement pour GitHub mais je ne l’ai pas testé. La syntaxe sera peut-être un peu différente). (Bien sûr, cela fonctionne pour tout type de script)

Cela peut être fait en utilisant les jetons d'authentification. Voici la documentation de l'API de GitLab et voici l'API de GitHub

Pour plus de facilité, je vais utiliser le https://gitlab.com comme exemple de serveur.

  • Allez sur https://gitlab.com/profile/account et trouvez votre "jeton privé".

  • Imprimez ensuite la liste des projets et trouvez l’identifiant de votre projet que vous recherchez.

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

    ou allez-y avec votre navigateur (un json viewer aidera beaucoup)

  • Imprimez ensuite la liste des fichiers contenus dans ce projet et recherchez l'id de votre fichier recherché.

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

  • Enfin obtenir/exécuter le fichier!

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

Au cas où vous voudriez exécuter le script (drupal .make)

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

(Si vous êtes ici à la recherche d'un flux de travail pour intégrer GitLab à Aegir .make plates-formes sans utiliser de jetons (peut-être SSH?), Créez un fil de discussion et collez-le ici.)

EDIT

Vous pouvez obtenir le fichier sans le project_id en utilisant le nom du projet encodé. Par exemple, le my-user-name/my-project deviendra: my-user-name%2Fmy-project

24
tvl

Mise à jour 2018-12-25:

tant que vous ne téléchargez pas de gros fichiers, cela devrait fonctionner:

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>"

, un exemple concret, le téléchargement du fichier /README.md à partir du référentiel privé https://gitlab.com/divinity76/Yur17, où l’URL de téléchargement Web est https://gitlab.com/divinity76/Yur17/raw/master/README.md?inline=false, est:

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

notez spécialement comment le gitlab_username/repo_name était codé en URL, par exemple, / est devenu %2F (vous pouvez vérifier comment votre nom d'utilisateur et le nom du référent sont codés en url en ouvrant le terminal JavaScript de votre navigateur, en écrivant encodeURIComponent("your_username/repo_name"); dans le terminal et en appuyant sur entrée.)

merci à Jonathan Hall @ gitlab à mg.gitlab.com, et https://docs.gitlab.com/ee/api/repository_files.html , et tvl d’avoir aidé à trouver une solution.



Mise à jour 2018-12-11: cette méthode ne fonctionne plus, elle sert maintenant la page de connexion, avec un message disant need to log in to continue, même en utilisant HTTP 200 OK (honte à eux), se mettra à jour si je découvre pourquoi (@XavierStuvw affirme que c'est problèmes de sécurité liés)



j'ai trouvé un moyen beaucoup plus facile de le faire que la réponse de @tvl,

commencez par créer un jeton d'accès avec accès à l'API ici: https://gitlab.com/profile/personal_access_tokens , puis faites:

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

j'ai trouvé la solution ici.

8
hanshenrik

Si vous souhaitez accéder à un fichier privé de GitLab, vous pouvez utiliser l'approche ci-dessous, qui a fonctionné pour moi :)

Construisez l'URL: _

https: // url/api/v4/projets/projectId/référentiel/fichiers/NomFichier/raw? ref = maître & private_token = Generated_private_token


  • url est votre url Gitlab ex: git.lab.com.
  • /api/v4/projects est une constante.
  • projectId est le projectId de votre projet, que vous pouvez trouver ci-dessous le nom de votre projet dans gitlab.
  • /repository/files est à nouveau une constante.
  • NomFichier est le nom du fichier ex: sagar.txt
  • /raw? ref = est une constante et la valeur de ref peut être maître ou n’importe quelle branche de votre choix. Je récupère le fichier du maître.
  • Generated_private_token doit être généré à partir de gitlab, veuillez suivre les étapes décrites dans le lien: Générer un jeton privé
0
Sagar Shetty