今回はGitLabに複数ユーザーを一括で追加する方法について、その一例を紹介します。
背景
GitLab Self-managed版は、Web画面からユーザーを追加する場合、現状1ユーザーずつしか登録することができません。一方で、GitLabインスタンスを作成してプロジェクト等で利用する場合、複数のユーザーを一度に登録する場面にも遭遇することが予想されます。
今回は go-gitlab
というGo言語のライブラリを利用して、コマンドラインから複数ユーザーを一括で登録する方法を検証しました。
検証
今回用意したコードは以下の通りです。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言語はビルドすればシングルバイナリで利用できるので、様々な環境での流用もしやすいかと思います。良ければ参考にしてみてください。