GitlabにはOpenAPI Provider としての機能がある
実はあまり知られていないことだと思うのですが、GitlabにはOpenAPI Providerとしての機能を持っています(doorkeeper gem を使っているそうです)
公式にも以下のような記述があり、便利に使えます。
使い道はいろいろあるのですが、よく一緒にインストールされがちなJenkinsとの連携ができると、ユーザー管理も統一できて、なかなか良いのではと思います。
しかしながら、公式の情報だけを見ているとURLの設定とかちょっとよく分からないことが多く、Jenkinsと統合させるのはちょいと手間がかかりそうです。
その辺をスムーズにしてくれるのが、以下に紹介するGitlab Authentication Pluginです。
Gitlab Authentication Plugin で楽々導入
導入方法はここで語るまでもない感じですが、以下のような手順になります。
1. Gitlab側でアプリケーションの追加を行う
まずはGitlab側、Admin Area > Applications から認証済みアプリケーションの一覧に進むことができます。
そこで"New Application"ボタンをクリックし、アプリケーションを追加します。
必要なscopeはapi
のみでOKです。
Callback URLは /securityRealm/finishLogin
をJenkinsのURL末尾につけたものになります。
ここで生成されたトークンは再度閲覧できないのでメモっておきましょう。
2. Jenkins側でプラグインを導入する
Jenkins側で Gitlab Authentication Plugin を導入します。普通にプラグインマネージャからインストールできるはずです。
インストールが終わると、Jenkinsの管理 > グローバルセキュリティの設定 から Authentication
の項目を変更し、Gitlab Authentication Plugin
を選択します。設定項目は以下の通りです。
- Gitlab Web URI: GitlabのトップURL
- Gitlab API URI: Enterprise版以外は同一のURLでOK
- ClientID/ClientSecret: Gitlab側でコピーした値をそのまま利用する。
設定がうまくいくと、JenkinsのトップページからGitlabの画面へとリダイレクトされるようになります。そこでログインするとJenkinsからもGitlabのユーザーでログインした状態になります。Jenkins側からユーザー名とグループは参照可能になっていますので、グループごとのセキュリティの設定などは適宜実行していけるはずです。