「OAuth」という技術を使うと、Redmineのアカウント情報を使ってGitLabにログインすることができるようになります。これにより管理者のアカウント管理の手間が減り、ユーザーもGitLabにログインする際にユーザー名とパスワードを入力する必要がなくなります。
この記事では、RedmineとGitLabのOAuthの設定方法を紹介します。
※Redmineロゴのクレジット:Martin Herr (2009) / CC BY-SA 2.5 ※GitLabロゴのクレジット:GitLab.com / CC BY-NC-SA 4.0
はじめに
私たちの研究室でRedmine(プロジェクト管理システム)とGitLab(バージョン管理システム)のテスト運用を開始した際に、アカウント管理が大変になりそうだったので、少しでも負担を減らすために「OAuth」を使ってみました。これを利用すると、Redmineのアカウント情報を使ってGitLabにログインすることができるようになります。
具体的には、Redmineにログインした状態で「Sign in with Redmine」というリンクからGitLabにアクセスすると、GitLabにアカウントがない場合は自動的に生成され、GitLabにログインすることができます。このときRedmineのアカウントの「ログインID」「名前」「メールアドレス」の情報が自動的に引き継がれます。
以前OAuthを設定した際はかなり試行錯誤したので、今回仮想マシンを使って設定手順を確かめながら整理しました。ただし、まだ間違いがある可能性があります。また環境によって設定は異なるのでご注意ください。
今回は、下記の2つの記事の手順で作成したRedmineとGitLabの2つの仮想マシンを起動した状態で設定を行いました。このとき、RedmineとGitLabのURLはそれぞれ「http://RedmineサーバーのIPアドレス/redmine」、「http://GitLabサーバーのIPアドレス」となっています。
Redmineの設定
プラグインのインストール
Tera TermなどでRedmineのサーバーへアクセス
下記コマンドでプラグイン用のフォルダへ移動
cd /var/lib/redmine/plugins/
- 下記コマンドでプラグインをダウンロード
git clone https://github.com/suer/redmine_oauth_provider
- 下記コマンドでプラグインをインストール
bundle update bundle exec rake redmine:plugins:migrate RAILS_ENV=production
- Redmineを再起動するために、下記コマンドで「restart.txt」というファイルを作成
touch /var/lib/redmine/tmp/restart.txt
プラグインの設定
管理者アカウントでRedmineにログイン
「http://「RedmineサーバーのIPアドレス」/redmine/oauth_clients/」にアクセス
「アプリケーションの登録」をクリック
- 「名称」に適当な名前、「メインアプリケーションURL」と「コールバックURL」にGitLabのURLを入力し「登録する」
- 表示される「Consumer Key」と「Consumer Secret」の値をメモする
GitLabの設定
ライブラリのインストール
Tera TermなどでGitLabのサーバーへアクセス
一時的に「/opt/gitlab/embedded/bin」にパスを通す
export PATH=$PATH:/opt/gitlab/embedded/bin
- 下記コマンドでライブラリをインストールする
gem install omniauth-redmine
- 「/opt/gitlab/embedded/service/gitlab-rails/Gemfile」ファイルの
gem 'rack-oauth2', '~> 1.2.1'
という行の下あたりに下記を追記する
gem "omniauth-redmine"
- 下記コマンドでフォルダを移動する
cd /opt/gitlab/embedded/service/gitlab-rails
- 下記コマンドでインストールとプリコンパイル?
bundle install bundle exec rake assets:precompile RAILS_ENV=production
各種設定
- 「/opt/gitlab/embedded/service/gitlab-rails/config/initializers/omniauth.rb」ファイルの
OmniAuth.config.full_host
部分を下記のように修正
#OmniAuth.config.full_host = Settings.gitlab['base_url'] OmniAuth.config.full_host = "http://「GitLabサーバーのIPアドレス」"
- 「/etc/gitlab/gitlab.rb」の
## For setting up omniauth
の下あたりに下記を追記する- ※
omniauth_allow_single_sign_on
をtrue
にすると、アカウントが存在しないときに新規作成します - ※
omniauth_block_auto_created_users
をfalse
にすると、新規作成されたアカウントを管理者が承認する必要がなくなります
- ※
gitlab_rails['omniauth_enabled'] = true gitlab_rails['omniauth_allow_single_sign_on'] = true gitlab_rails['omniauth_block_auto_created_users'] = false gitlab_rails['omniauth_providers'] = [ { "name" => "redmine", "app_id" => "「前述のConsumer Key」", "app_secret" => "「前述のConsumer Secret」", "args" => { "redmine_base_url" => "http://「RedmineサーバーのIPアドレス」/redmine" } } ]
下記コマンドでGitLabを再構築?
gitlab-ctl reconfigure
OAuthでログイン
admin以外のアカウントでRedmineにログイン
GitLabにアクセスすると「Sign in with Redmine」が表示されるのでクリック
- 一度Redmineが開くので「許可」をクリック
- RedmineのアカウントでGitLabにログインできました!
参考資料
- OAuthについて
- Redmine、GitLabの連携について
- Redmine・Gitlab・Jenkins のログインパスワードの管理が大変になったので OAuth 化した - すえひろがりっっっっ!
- Gitlab, AsakusaSatellite などの開発者向け Rails アプリを Redmine で OAuth 認証するための Omniauth プラグイン作った - すえひろがりっっっっ!
- GitLab Documentation
- Working Gitlab Redmine integration · suer/omniauth-redmine Wiki · GitHub
- gitlabのomniauthを利用してgoogleアカウントでログインする | いちよんこーど
- OmniAuthを正しくcallbackさせる - ぱろっと・すたじお
おわりに
以前は3日間かかりましたが、今回は一晩で設定できました( ゚ ρ ゚ )