この記事は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 | 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で実装されています。必要な情報に過不足があるようでしたら、カスタマイズしてご利用ください。