web-dev-qa-db-ja.com

GitLabプライベートリポジトリから直接ファイルを開く

GitLabサーバーにプライベートリポジトリがあり、SSHを使用して、git cloneを使用してプロジェクトをプルできます。

しかし、サーバーから直接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

成功なし。もちろん、それは私にログインページを返します。

出来ますか?

17
tvl

Chris の役立つヘルプを使用して、GitLabサーバーからスクリプト(私の場合は、Drupal .makeファイル)を実行する方法を示します。 (おそらくGitHubで動作しますが、テストしていません。構文が少し異なるかもしれません)。 (もちろん、これはどのタイプのスクリプトでも機能します)

これは、認証トークンを使用して行うことができます。 これはGitLabのAPIのドキュメントです および ここはGitHubのAPIです

便宜上、サンプルサーバーとして https://gitlab.com を使用します。

  • https://gitlab.com/profile/account に移動し、「プライベートトークン」を見つけます

  • 次に、プロジェクトのリストを印刷して、探しているプロジェクトのIDを見つけます。

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

    またはあなたのブラウザでそこに行きます( jsonビューア は大いに役立ちます)

  • 次に、このプロジェクトにあるファイルのリストを印刷し、探しているファイルのIDを見つけます

    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をトークン(おそらくSSH?)を使用せずにAegir .makeプラットフォームと統合するワークフローを探している場合は、スレッドを作成して、ここにリンクを貼り付けてください。

[〜#〜]編集[〜#〜]

encodedプロジェクト名を使用すると、project_idなしでファイルを取得できます。たとえば、my-user-name/my-projectは次のようになります:my-user-name%2Fmy-project

24
tvl

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からダウンロードします。ここで、Webダウンロード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になった(ブラウザのJavaScript端末を開いて、ターミナルにencodeURIComponent("your_username/repo_name");と書き込んで、ユーザー名とリポジトリ名がURLエンコードされていることを確認できます。 Enterキーを押します。)

Jonathan Hall @ mg.gitlab.comのgitlab、および https://docs.gitlab.com/ee/api/repository_files.htmltvl へのリーチの支援に感謝解決策。



2018-12-11の更新:このメソッドは機能しなくなり、現在はログインページを提供するだけです。HTTP200 OK(それらの恥)を使用していても、need to log in to continueというメッセージが表示され、理由が判明すると更新されます(@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'

私は解決策を見つけました here。

10
hanshenrik

プライベートGitLabからファイルにアクセスする場合は、以下の方法を使用できます。

URLを作成します:

https:// url/api/v4/projects/projectId/repository/files/fileName/raw?ref = master&private_token = Generated_private_token


  • urlはGitlabのURLの例です:git.lab.com。
  • / api/v4/projectsは定数です。
  • projectIdはプロジェクトのprojectIdで、gitlabのプロジェクト名の下にあります。
  • / repository/filesも定数です。
  • fileNameは、ファイルの名前ですex:sagar.txt
  • / raw?ref =は定数であり、refの値はマスターまたはファイルの取得元となる任意のブランチにすることができます。マスターからファイルを取得しています。
  • Generated_private_tokenはgitlabから生成する必要があります。リンクに記載されている手順に従ってください: Generate Private Token
0
Sagar Shetty