GitLabで特定のGroupのすべてのProjectのpath名を取得するコマンド
劇場版SHIROBAKOを見に行きたい。
目標
GitLabで特定のGroupのすべてのProjectのpath名を取得すること
なぜやるのか
バックアップとしてgit clone
コマンドでリポジトリの実データを保持しておきたいからです。
リポジトリを都度cloneしてくるのは手間ですが、リポジトリ名の一覧を取得できればあとはシェルスクリプトなり何なりで自動的に連続してcloneを行うことができるので便利です。
参考
前提
- 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作成時に付けた名前を取得したい場合はpath
をname
に変えて実行してください。
完了
実行例
下記画像の様に動作確認用のProjectを作成しました。
上記コマンドを実行した結果、Projectのpath名の一覧が取得できました。
今回はここまで。