GitLabインスタンスとGitHubのインテグレーション
GitLabインスタンスをGitHub.comやGitHub Enterpriseとインテグレーションすることで、GitHubからプロジェクトをインポートしたり、GitHubアカウントでGitLabインスタンスにログインできるようになります。
GitHub OAuth の有効化
GitHub OmniAuth プロバイダを有効にするには、GitHub から OAuth 2 クライアント ID とクライアントシークレットを取得する必要があります。 これらの情報を取得するには、GitHub にサインインしてOAuthアプリの作成手順に従ってください。
GitHubでOAuth 2アプリを作成する際には、以下の情報が必要になります:
-
https://gitlab.example.com
のように、GitLab インスタンスの URL を指定します。 - 認証コールバックの URL。この場合は
https://gitlab.example.com/users/auth
。 GitLab インスタンスがデフォルト以外のポートを使っている場合は、ポート番号を含めます。
/users/auth
を追加してください。初期設定についてはOmniAuth の初期設定を参照してください。
GitHub プロバイダの設定を終えたら、次に示す手順で GitLab 設定ファイルに代入する情報が必要になります。
GitHubからの設定 | GitLabの設定ファイルに代入します。 | 説明 |
---|---|---|
クライアントID | YOUR_APP_ID
| OAuth 2 クライアント ID |
クライアントの秘密 | YOUR_APP_SECRET
| OAuth 2 クライアントシークレット |
URL | https://github.example.com/
| GitHubデプロイURL |
GitLab サーバーに GitHub OAuth 2 アプリを組み込むには、以下の手順に従ってください:
オムニバス・インストール用
-
/etc/gitlab/gitlab.rb
を編集します:GitHub.comの場合:
gitlab_rails['omniauth_providers'] = [ { "name" => "github", "app_id" => "YOUR_APP_ID", "app_secret" => "YOUR_APP_SECRET", "args" => { "scope" => "user:email" } } ]
GitHub Enterpriseの場合:
gitlab_rails['omniauth_providers'] = [ { "name" => "github", "app_id" => "YOUR_APP_ID", "app_secret" => "YOUR_APP_SECRET", "url" => "https://github.example.com/", "args" => { "scope" => "user:email" } } ]
https://github.example.com/
を GitHub の URL に置き換えてください。 -
ファイルを保存し、変更を有効にするために GitLab を再設定します。
ソースからのインストールの場合
-
リポジトリに移動し、
config/gitlab.yml
を編集してください:GitHub.comの場合:
- { name: 'github', app_id: 'YOUR_APP_ID', app_secret: 'YOUR_APP_SECRET', args: { scope: 'user:email' } }
GitHub Enterpriseの場合:
- { name: 'github', app_id: 'YOUR_APP_ID', app_secret: 'YOUR_APP_SECRET', url: "https://github.example.com/", args: { scope: 'user:email' } }
https://github.example.com/
を GitHub の URL に置き換えてください。 -
ファイルを保存し、GitLabを再起動して変更を有効にします。
-
GitLab のサインインページを更新すると、通常のサインインフォームの下に GitHub のアイコンが表示されます。
-
アイコンをクリックして認証プロセスを開始します。 GitHubはユーザーにサインインとGitLabアプリケーションの作成を要求します。
GitHub Enterprise と自己署名証明書
自己署名証明書を使って GitHub Enterprise からプロジェクトをインポートしようとしてインポートに失敗する場合は、SSL 認証を無効にする必要があります。 プロバイダーの設定でverify_ssl
をfalse
に追加し、GitLab サーバーでグローバル GitsslVerify
オプションをfalse
に変更することで無効になります。
オムニバス・パッケージ用:
gitlab_rails['omniauth_providers'] = [
{
"name" => "github",
"app_id" => "YOUR_APP_ID",
"app_secret" => "YOUR_APP_SECRET",
"url" => "https://github.example.com/",
"verify_ssl" => false,
"args" => { "scope" => "user:email" }
}
]
また、GitLabをホストしているサーバーでGit SSL検証を無効にする必要があります。
omnibus_gitconfig['system'] = { "http" => ["sslVerify = false"] }
ソースからのインストールの場合:
- { name: 'github', app_id: 'YOUR_APP_ID',
app_secret: 'YOUR_APP_SECRET',
url: "https://github.example.com/",
verify_ssl: false,
args: { scope: 'user:email' } }
また、GitLabをホストしているサーバーでGit SSL検証を無効にする必要があります。
git config --global http.sslVerify false
変更を有効にするには、Omnibus経由でインストールした場合はGitLabを再設定し、ソースからインストールした場合はGitLabを再起動してください。
トラブルシューティング
GitHub Enterprise 経由で GitLab にサインインしようとするとエラー 500 が発生します。
詳細はGitLabサーバーのproduction.log
。ログにFaraday::ConnectionFailed (execution expired)
のようなエラーが表示される場合は、GitLabインスタンスとGitHub Enterpriseの接続に問題がある可能性があります。確認するには、railsコンソールを起動し、<github_url>
をGitHub EnterpriseインスタンスのURLに置き換えて以下のコマンドを実行してください:
uri = URI.parse("https://<github_url>") # replace `GitHub-URL` with the real one here
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = 1
response = http.request(Net::HTTP::Get.new(uri.request_uri))
同じようなexecution expired
エラーが表示される場合は、ネットワーク接続に関する説を裏付けるものです。 その場合は、GitLab サーバーが GitHub エンタープライズインスタンスに到達できることを確認してください。
既存の GitLab アカウントを使用せずに GitHub アカウントを使用してサインインすることはできません。
GitLabで、サインイン時にSigning in using your GitHub account without a pre-existing
GitLab account is not allowed. Create a GitLab account first, and then connect it to your
GitHub account
というメッセージが表示される場合:
- プロフィール > アカウントに移動します。
- Social sign-in “セクションで、GitHubアイコンの近くにある“Connect “をクリックします。
これで GitHub からサインインできるようになります。