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 インスタンスがデフォルト以外のポートを使っている場合は、ポート番号を含めます。
注意:OAuth2 によるリダイレクトの脆弱性を防ぐには、GitHub 認証コールバック URL の末尾に/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 アプリを組み込むには、以下の手順に従ってください:

オムニバス・インストール用

  1. /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 に置き換えてください。

  2. ファイルを保存し、変更を有効にするために GitLab を再設定します。


ソースからのインストールの場合

  1. リポジトリに移動し、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 に置き換えてください。

  2. ファイルを保存し、GitLabを再起動して変更を有効にします。


  1. GitLab のサインインページを更新すると、通常のサインインフォームの下に GitHub のアイコンが表示されます。

  2. アイコンをクリックして認証プロセスを開始します。 GitHubはユーザーにサインインとGitLabアプリケーションの作成を要求します。

GitHub Enterprise と自己署名証明書

自己署名証明書を使って GitHub Enterprise からプロジェクトをインポートしようとしてインポートに失敗する場合は、SSL 認証を無効にする必要があります。 プロバイダーの設定でverify_sslfalse に追加し、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 というメッセージが表示される場合:

  1. プロフィール > アカウントに移動します。
  2. Social sign-in “セクションで、GitHubアイコンの近くにある“Connect “をクリックします。

これで GitHub からサインインできるようになります。