kengo700のナレッジベース

誰かの役に立つと思う情報を発信するブログ

RedmineのアカウントでGitLabにログインする設定(OAuth認証)

「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アドレス」となっています。

kengo700.hatenablog.com

kengo700.hatenablog.com

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/」にアクセス

  • 「アプリケーションの登録」をクリック

f:id:kengo700:20160327232836p:plain

  • 「名称」に適当な名前、「メインアプリケーションURL」と「コールバックURL」にGitLabのURLを入力し「登録する」

f:id:kengo700:20160327233017p:plain:w300

  • 表示される「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_ontrueにすると、アカウントが存在しないときに新規作成します
    • omniauth_block_auto_created_usersfalseにすると、新規作成されたアカウントを管理者が承認する必要がなくなります
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」が表示されるのでクリック

f:id:kengo700:20160328062113p:plain

  • 一度Redmineが開くので「許可」をクリック

f:id:kengo700:20160328062217p:plain

  • RedmineのアカウントでGitLabにログインできました!

f:id:kengo700:20160328062241p:plain

参考資料

おわりに

以前は3日間かかりましたが、今回は一晩で設定できました( ゚ ρ ゚ )