- 公開日:
GitLabのよくある操作を半自動化するCLIツール
- Authors
- Name
- 代表取締役 宮永邦彦
- @miyanaga
画像軽量化とWebフロントエンドのスピード改善の専門家です。Web系のIT技術大好き。
このサイトではスピード改善のリアルや、日々の技術的な気づきを共有します。
弊社ではクライアントとのソースコードやWikiによるドキュメント共有に、自前のGitLabを使うことがある。
よくある操作を毎回GUIから行うのが手間なので、Go言語によるCLIツールを作り、せっかくなのでオープンソースにした。
セットアップ
こちらから最新版をダウンロードし、
/usr/local/bin/gitlab-op
などPATHの通ったディレクトリに実行権限付きで配置する。
sudo cp downloadeds/gitlab-op /usr/local/bin/gitlab-op
sudo chmod +x /usr/local/bin/gitlab-op
続いてアクセストークンを作成する。GitLabの管理画面から、アカウントの設定画面から、 アクセストークン
- パーソナルアクセストークン
- 新しいトークンを追加
を選択する。
最低限必要なスコープは api
、read_api
、admin_mode
である。
作成したアクセストークンを控え、ホームディレクトリ(/Users/miyanaga
など)の下に.gitlab-op/credentials
ファイルを作成する。
[default]
url=https://<gitlabのURL>/
token=<作成したアクセストークン>
これでセットアップが完了だ。
操作方法
グループの作成
new-group
サブコマンドにグループのパスと名称を渡すとグループを作成できる。
gitlab-op new-group client-a クライアントA社
グループのパスは階層にも対応している(例 clients/client-a)。
プロジェクトの作成
new-project
サブコマンドにプロジェクトのパスと名称を渡すとプロジェクトを作成できる。
gitlab-op new-project client-a/project-alpha プロジェクトα
メンバーの招待
invite
サブコマンドにグループのパスとメールアドレス(複数可)を渡すと、グループへユーザーを招待する。
メールアドレスに対応するユーザーがまだ存在しない場合は、便宜的なユーザー名を付与してユーザーを作成する。
gitlab-op invite client-a メールアドレス1 メールアドレス2 ...
雑記
CLIツールによる自動化
グループやプロジェクトの追加は頻繁にあるわけではない。しかしGUIからの操作は時間がかかり、集中力を削がれる。CLIで操作できるようにしたのは正解だった。
特にメンバーの招待は手間が多く、数が多いと面倒だ。この機能は大変重宝している。
既存のCLIツール
オフィシャルの glab
(GitHubのgh
コマンドに相当)をはじめ、GitLab操作用のCLIツールがないわけではない。
それらをシェルスクリプトで組み合わせて実現することも検討した。しかし、そこまで使い勝手のよいCLIツールがなかったので自作に至った。
例えばGitLabの内部では、プロジェクトやグループには人間にわかりやすいslug(ディレクトリ風のパス)の他に、数値によるIDが割り当てられている。
操作によって必要なパラメータがslugか数値IDかまちまちだったりするので、シンプルなシェルスクリプトによるワークフローで実装できるものではなかった。
Go言語からのGitLab操作
モジュール github.com/xanzy/go-gitlab
を利用した。
このSDKライブラリはAPIの網羅性が非常に高く、APIとも素直に対応しているため、理解しやすい。大変使いやすかった。しかも頻繁にキャッチアップもされている模様だ。
おかげでGo言語によりSDKをスクリプティングし、シングルバイナリにするという負荷の低いアプローチを実現できた。