TECHSTEP

ITインフラ関連の記事を公開してます。

GitLabに複数ユーザーを一括で追加する

今回はGitLabに複数ユーザーを一括で追加する方法について、その一例を紹介します。

背景

GitLab Self-managed版は、Web画面からユーザーを追加する場合、現状1ユーザーずつしか登録することができません。一方で、GitLabインスタンスを作成してプロジェクト等で利用する場合、複数のユーザーを一度に登録する場面にも遭遇することが予想されます。

今回は go-gitlab というGo言語のライブラリを利用して、コマンドラインから複数ユーザーを一括で登録する方法を検証しました。

github.com

検証

今回用意したコードは以下の通りです。CSVファイルの扱いやエラーハンドリングなど修正箇所は色々あるかと思いますが、最低限動作することは確認しています。

package main

import (
    "encoding/csv"
    "flag"
    "log"
    "os"

    "github.com/xanzy/go-gitlab"
)

var (
  csvfile = flag.String("csv", "test.csv", "CSV file name")
  gitlabUrl = flag.String("url", "https://gitlab.example.com/api/v4", "GitLab URL")
)


func main() {
    flag.Parse()

    file, err := os.Open(*csvfile)
    if err != nil {
        log.Fatal("File open error", err)
    }
    defer file.Close()

    r := csv.NewReader(file)
    rows, err := r.ReadAll()
    if err != nil {
        log.Fatal("File read error", err)
    }

    git, err := gitlab.NewClient(os.Getenv("GitLabToken"), gitlab.WithBaseURL(*gitlabUrl))
    if err != nil {
        log.Fatal(err)
    }

    for _, v := range rows {
        opt := &gitlab.CreateUserOptions{
            Email:         gitlab.String(v[0]),
            Name:          gitlab.String(v[1]),
            Username:      gitlab.String(v[2]),
            ResetPassword: gitlab.Bool(true),
        }
     
        user, _, err := git.Users.CreateUser(opt)
        if err != nil {
            log.Fatal("Create User Error", user, err)
        }
    }
}

※参考情報

本ツールは、ユーザー情報を入力したCSVファイルを読み取り、GitLabの users APIに繰り返しリクエストを送ることで、複数のユーザー登録を実現しています。

例えば以下のようなCSVファイルを用意します。

test01@example.com,test-name-01,test-username-01
test02@example.com,test-name-02,test-username-02
test03@example.com,test-name-03,test-username-03

Go言語はインストール済みの前提で、以下のように実行します。

$ go mod init gitlab-users
$ go get github.com/xanzy/go-gitlab
$ go build

#GitLabにアクセスするためのPersonal Access Tokenを環境変数に設定
$ export GitLabToken=<GitLab Personal Access Token>

#実行時はCSVファイルとGitLab URLを指定する

$ ./gitlab-users -csv test.csv -url <GitLab URL>/api/v4
$

処理を完了してGitLabの画面からユーザー情報を見ると、CSVに記載したユーザーが登録されているのを確認できます。

Go言語はビルドすればシングルバイナリで利用できるので、様々な環境での流用もしやすいかと思います。良ければ参考にしてみてください。