gitlab-project-member-exporter - GitLabからプロジェクト毎のメンバー一覧をエクスポートするツールを作った

この記事はGitLab Advent Calendar 2019の2日目の記事です。

GitLabからプロジェクト毎のメンバー一覧をエクスポートするツール、gitlab-project-member-exporter を作りました。

なぜ作ったか

GitLabでグループ、メンバーが多くなってくると、誰がどこにアクセス可能な状態なのかの把握が面倒になってきます。

適当なタイミングで確認しようとしても、プロジェクトやユーザの情報をGitLabの管理画面から見ていくしかありません。数プロジェクトならばどうにかなりそうですが、数十、数百となってくると、ページ辿るだけでも面倒な作業になります。

全プロジェクト×メンバの一覧ができてしまえば、確認が少しは楽になるだろうということで、今回ツールとして作りました。

できること

このツールを使うと、下記のようなCSVファイルをエクスポートできます。プロジェクトとそれに所属するメンバーの一覧になります。

実際の権限と同様に、グループに権限があった場合、その配下のプロジェクトに権限があるものとして一覧化しています。

プロジェクトメンバ一覧

Project: Name Project: Visibility User: Name User: Username User: State Permission
Administrator / my-project private Administrator root active Maintainer
group1 aaa / project-b private Administrator root active Owner
group1 aaa / project-b private user2 user2 active Developer
group1 aaa / project-a private Administrator root active Owner
group1 aaa / project-a private user2 user2 active Developer
group1 aaa / project-a private user1 user1 blocked Maintainer

また、ユーザ一覧、プロジェクト一覧もエクスポートできます。

ユーザ一覧

Name Username Email State Admin Created at Last sign in at Last activity on
user3 user3 user3@example.com active FALSE 2019-11-16T13:37:15.885Z
user2 user2 user2@example.com active FALSE 2019-11-16T13:36:29.651Z
user1 user1 user1@example.com blocked FALSE 2019-11-16T13:35:44.406Z
Administrator root admin@example.com active TRUE 2019-11-16T07:50:47.821Z 2019-11-24T14:50:54.996Z 2019-11-25

プロジェクト一覧

Name Visibility Created at Last activity at
Administrator / my-project private 2019-11-16T13:48:47.727Z 2019-11-16T13:48:47.727Z
group1 / project-b private 2019-11-16T13:48:11.161Z 2019-11-24T15:08:11.024Z
group1 / project-a private 2019-11-16T13:44:20.849Z 2019-11-16T13:44:20.849Z

これら情報を使うことによって、いちいちGitLabのページを辿らなくても、プロジェクトメンバーの状況が一覧で確認できます。
新しいユーザやプロジェクトが追加されたこともわかるので、それらに対してどのように権限が設定されているのか、、といったことも追うことができます。

定期的に出力して、差分を見るというのも良いと思います。

技術的なところ

GitLabのAPIを利用しています。

必要なリソースへアクセスするためのAPIは揃っており、特に悩むことはありませんでした。 (Paginationの情報がレスポンスのヘッダに乗ってくることを見逃していたくらい)

使っているAPIは下記でまとめています。

利用方法

利用方法については、下記READMEをご参照ください。

Javaで実装されています。必要な情報に過不足があるようでしたら、カスタマイズしてご利用ください。