0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitLab APIでアカウント一覧を取得する

0
Posted at

はじめに

GitLabでユーザーの棚卸しや監査を行う際、登録されているユーザーの一覧をCSV形式で出力したい場面があります。

GitLabのWeb UIからもユーザー一覧を確認できますが、CSV形式で出力したい場合はREST APIを利用すると簡単にエクスポートできます。
(台帳に転記する際などに便利です。)

今回は、GitLab APIを使用してユーザー一覧をCSV出力する方法をまとめます。

想定環境・前提条件は次の通りです。

  • 想定環境
    • Self Host GitLab
      • GitLab Community EditionのLinux Package(Omnibus)
      • v18.1.0 / v18.9.1で確認済み
  • 前提条件
    • GitLabの管理者権限を持つユーザーであること
    • curljqコマンドが利用可能

手順

Personal Access Tokenを発行する

最初にAPI実行用のPersonal Access Tokenを発行します。

  1. Web UI右上のユーザーアイコンから Preferences を開く
  2. 左ペインの Access Tokens を選択する
  3. 次の内容でTokenを発行する
    項目 設定値
    Token name 任意
    Expiration date 任意(短期間を推奨)
    Scopes api(またはread_api)およびadmin_mode
  4. Create personal access token をクリックする
  5. 表示されたTokenを手元にコピーする

注意

Tokenは発行時しか表示されないため、手元にコピーしておきます。


APIを実行する

環境変数にTokenとGitLabのURLを設定します。

export TOKEN="<作成したToken>"
export GITLAB_URL="https://example.com"

続いて、次のコマンドを実行します。

echo "name,email,state,created_at,last_sign_in_at" > gitlab_account_list.csv

curl -s --header "PRIVATE-TOKEN: ${TOKEN}" \
"${GITLAB_URL}/api/v4/users?per_page=100" \
| jq -r '
.[] |
select(.state == "active" or .state == "deactivated") |
[
    .name,
    .email,
    .state,
    .created_at,
    .last_sign_in_at
] | @csv' \
>> gitlab_account_list.csv

実行後、カレントディレクトリにgitlab_account_list.csvが作成されます。

出力されたCSVには、次の情報が含まれます。

項目 内容
name ユーザー名
email メールアドレス
state ユーザー状態
created_at 作成日時
last_sign_in_at 最終ログイン日時

補足1

/api/v4/usersで取得可能なパラメータは他にも存在します。
今回はユーザー棚卸しを目的としているため、上記項目のみをjqで抽出しています。

補足2

ユーザー状態についてはこちらを参照してください。
今回は"active"と"deactivated"のユーザーのみを抽出しています。
他の状態のユーザー(blockedやbannedなど)も併せて抽出したい場合は、select(.state == "active" or .state == "deactivated") |の行を削除してください。

補足

100ユーザーを超える場合

GitLab APIではPagination(ページネーション)の仕組みにより、一度に取得できる件数が制限されています。

デフォルトでは20件ですが、per_pageを指定することで最大100件まで取得できます。

/api/v4/users?per_page=100

100件を超える場合は、pageパラメータを指定して複数回に分けて取得します。

例えばユーザー数が200人の場合、次のようになります。

1~100件目

curl -s --header "PRIVATE-TOKEN: ${TOKEN}" \
"${GITLAB_URL}/api/v4/users?per_page=100&page=1"

101~200件目

curl -s --header "PRIVATE-TOKEN: ${TOKEN}" \
"${GITLAB_URL}/api/v4/users?per_page=100&page=2"

必要に応じて取得したCSVを結合することで、全ユーザーを一覧として取得できます。

補足1

本記事では紹介しませんが、レスポンスヘッダーのX-Next-Pageを利用することで、最後のページまで自動取得するスクリプトを作成することもできます。

まとめ

GitLab APIを利用すると、ユーザー一覧をCSV形式で簡単に取得できます。

特にユーザー棚卸しや監査対応では、CSVとして出力できるとExcelなどで加工しやすいため便利です。

ユーザー数が100件を超える環境では、Paginationを利用して複数回取得する点だけ注意すれば、特別なツールを用意しなくても、手軽にユーザー一覧を取得できます。

参考情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?