mind.

学んだことの記録

GitLabで特定のGroupのすべてのProjectのpath名を取得するコマンド

劇場版SHIROBAKOを見に行きたい。

目標

GitLabで特定のGroupのすべてのProjectのpath名を取得すること

なぜやるのか

バックアップとしてgit cloneコマンドでリポジトリの実データを保持しておきたいからです。
リポジトリを都度cloneしてくるのは手間ですが、リポジトリ名の一覧を取得できればあとはシェルスクリプトなり何なりで自動的に連続してcloneを行うことができるので便利です。

参考

tyablog.net

qiita.com

前提

  • curlがインストールされていること
  • jq がインストールされていること
    動作確認に使用したOSはCentOS7.7ですがcurlが使えればおそらくどのディストリビューションでもできると思います。

手順

やることは大まかに下記の2つです。
1.アクセストークンを作成する
2.GitLab APIのコマンドを実行する

1.アクセストークンを作成する

今回はGitLab.comでの手順を書きますが、オンブレミス版でも同様です。
1-1.自分のアカウントの設定ページ(https://gitlab.com/profile)をブラウザで表示する。
1-2.画面左端の「Access Tokens」ボタンを押下
1-3.「Name」欄にアクセストークンの名前を入力し、「Expires at」欄に有効期限を入力する
1-4.「Scopes」欄に表示されている、これから作成するアクセストークンで利用できる権限を選択
今回はリポジトリ名の一覧を取得するだけなので「api」にチェックを付ける
1-5.「Create personal access token」ボタンを押下する
1-6.画面更新後、「Your New Personal Access Token」にアクセストークンの文字列が表示されるのでコピーしておく
なお、この画面から遷移するとアクセストークンの文字列は見れなくなるのでご注意

2.GitLab APIのコマンドを実行する

2-1.環境変数「 $ACCESS_TOKEN」に手順1で取得したアクセストークン文字列をセットします。
2-2.下記コマンドを実行します。

curl --header "Private-Token: $ACCESS_TOKEN" https://gitlab.com/api/v4/groups/[Group ID] | jq .projects[].path

v4はGitLab APIのバージョンです。以前はv3だったようですが、今v3で実行しようとするとv4を使用するように促すメッセージが表示され実行できません。
[Group ID]はGroupのトップページに表示される7桁の数字です。
Private-Tokenの値に直接アクセストークン文字列を書いてもできますが、今回は環境変数を参照するようにします。
チーム開発では権限を持たせたい人にアクセストークン文字列を共有することが適切だと思います。
| jq .projects[].pathは、コマンド前半部分で取得したjsonデータを整形して表示するためのコマンドです。
cloneのコマンドで使用することが目的なのでpathメンバの値を指定しました。
Project作成時に付けた名前を取得したい場合はpathnameに変えて実行してください。

完了

実行例

下記画像の様に動作確認用のProjectを作成しました。
f:id:cm_kenji:20200229193400p:plain
上記コマンドを実行した結果、Projectのpath名の一覧が取得できました。
f:id:cm_kenji:20200229195039p:plain

今回はここまで。