2018-10-27 20:05:01 -04:00
# Integrate your GitLab instance with GitHub
2014-04-02 23:11:25 -04:00
2018-10-27 20:05:01 -04:00
You can integrate your GitLab instance with GitHub.com as well as GitHub Enterprise to enable users to import projects from GitHub and/or to login to your GitLab instance with your GitHub account.
2015-02-18 16:42:52 -05:00
2018-10-27 20:05:01 -04:00
## Enabling GitHub OAuth
2014-04-02 23:11:25 -04:00
2020-01-20 13:08:44 -05:00
To enable the GitHub OmniAuth provider, you'll need an OAuth 2 Client ID and Client Secret from GitHub. To get these credentials, sign into GitHub and follow their procedure for [Creating an OAuth App ](https://developer.github.com/apps/building-oauth-apps/creating-an-oauth-app/ ).
2014-04-24 18:48:22 -04:00
2020-01-20 13:08:44 -05:00
When you create an OAuth 2 app in GitHub, you'll need the following information:
2014-04-24 18:48:22 -04:00
2020-01-20 13:08:44 -05:00
- The URL of your GitLab instance, such as `https://gitlab.example.com` .
- The authorization callback URL; in this case, `https://gitlab.example.com/users/auth` . Include the port number if your GitLab instance uses a non-default port.
2016-04-29 00:13:21 -04:00
2020-01-20 13:08:44 -05:00
NOTE: **Note:**
2020-07-13 11:09:08 -04:00
To prevent an [OAuth2 covert redirect ](https://oauth.net/advisories/2014-1-covert-redirect/ ) vulnerability, append `/users/auth` to the end of the GitHub authorization callback URL.
2014-04-24 18:48:22 -04:00
2020-01-20 13:08:44 -05:00
See [Initial OmniAuth Configuration ](omniauth.md#initial-omniauth-configuration ) for initial settings.
2014-04-24 18:48:22 -04:00
2020-01-20 13:08:44 -05:00
Once you have configured the GitHub provider, you'll need the following information, which you'll need to substitute in the GitLab configuration file, in the steps shown next.
2018-10-27 20:05:01 -04:00
2020-01-20 13:08:44 -05:00
| Setting from GitHub | Substitute in the GitLab configuration file | Description |
|:---------------------|:-----------------------------------------------|:------------|
| Client ID | `YOUR_APP_ID` | OAuth 2 Client ID |
| Client Secret | `YOUR_APP_SECRET` | OAuth 2 Client Secret |
| URL | `https://github.example.com/` | GitHub Deployment URL |
2019-01-22 12:38:08 -05:00
2020-01-20 13:08:44 -05:00
Follow these steps to incorporate the GitHub OAuth 2 app in your GitLab server:
2014-04-24 18:48:22 -04:00
2020-01-20 13:08:44 -05:00
**For Omnibus installations**
2014-04-24 18:48:22 -04:00
2020-01-20 13:08:44 -05:00
1. Edit `/etc/gitlab/gitlab.rb` :
2015-02-13 17:49:19 -05:00
2019-07-11 11:21:26 -04:00
For GitHub.com:
2017-02-09 02:38:25 -05:00
2019-07-11 11:21:26 -04:00
```ruby
gitlab_rails['omniauth_providers'] = [
{
"name" => "github",
"app_id" => "YOUR_APP_ID",
"app_secret" => "YOUR_APP_SECRET",
"args" => { "scope" => "user:email" }
}
]
```
2017-02-09 02:38:25 -05:00
2019-07-11 11:21:26 -04:00
For GitHub Enterprise:
2017-02-09 02:38:25 -05:00
2019-07-11 11:21:26 -04:00
```ruby
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" }
}
]
```
2014-04-24 18:48:22 -04:00
2020-01-20 13:08:44 -05:00
**Replace `https://github.example.com/` with your GitHub URL.**
2020-01-23 19:08:51 -05:00
1. Save the file and [reconfigure ](../administration/restart_gitlab.md#omnibus-gitlab-reconfigure ) GitLab for the changes to take effect.
2020-01-20 13:08:44 -05:00
---
**For installations from source**
1. Navigate to your repository and edit `config/gitlab.yml` :
2014-04-02 23:11:25 -04:00
2019-07-11 11:21:26 -04:00
For GitHub.com:
2016-04-22 15:43:10 -04:00
2020-03-23 23:09:28 -04:00
```yaml
2019-07-11 11:21:26 -04:00
- { name: 'github', app_id: 'YOUR_APP_ID',
app_secret: 'YOUR_APP_SECRET',
args: { scope: 'user:email' } }
```
2016-04-22 15:43:10 -04:00
2019-07-11 11:21:26 -04:00
For GitHub Enterprise:
2016-04-22 15:43:10 -04:00
2020-03-23 23:09:28 -04:00
```yaml
2019-07-11 11:21:26 -04:00
- { name: 'github', app_id: 'YOUR_APP_ID',
app_secret: 'YOUR_APP_SECRET',
url: "https://github.example.com/",
args: { scope: 'user:email' } }
```
2014-04-02 23:11:25 -04:00
2020-01-20 13:08:44 -05:00
**Replace `https://github.example.com/` with your GitHub URL.**
2014-04-24 18:48:22 -04:00
2020-01-23 19:08:51 -05:00
1. Save the file and [restart ](../administration/restart_gitlab.md#installations-from-source ) GitLab for the changes to take effect.
2014-04-24 18:48:22 -04:00
2020-01-20 13:08:44 -05:00
---
2014-04-24 18:48:22 -04:00
2020-01-20 13:08:44 -05:00
1. Refresh the GitLab sign in page. You should now see a GitHub icon below the regular sign in form.
2014-04-02 23:11:25 -04:00
2020-01-20 13:08:44 -05:00
1. Click the icon to begin the authentication process. GitHub will ask the user to sign in and authorize the GitLab application.
2017-02-09 02:38:25 -05:00
2018-06-04 05:12:21 -04:00
## GitHub Enterprise with self-signed Certificate
2017-05-18 14:30:21 -04:00
If you are attempting to import projects from GitHub Enterprise with a self-signed
certificate and the imports are failing, you will need to disable SSL verification.
2017-05-22 17:47:31 -04:00
It should be disabled by adding `verify_ssl` to `false` in the provider configuration
and changing the global Git `sslVerify` option to `false` in the GitLab server.
2017-05-18 14:30:21 -04:00
2019-08-27 04:41:50 -04:00
For Omnibus package:
2017-05-18 14:30:21 -04:00
```ruby
2019-07-11 11:21:26 -04:00
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" }
}
]
2017-05-18 14:30:21 -04:00
```
2017-05-22 17:47:31 -04:00
You will also need to disable Git SSL verification on the server hosting GitLab.
```ruby
omnibus_gitconfig['system'] = { "http" => ["sslVerify = false"] }
```
2017-05-18 14:30:21 -04:00
For installation from source:
2020-03-23 23:09:28 -04:00
```yaml
2019-07-11 11:21:26 -04:00
- { name: 'github', app_id: 'YOUR_APP_ID',
app_secret: 'YOUR_APP_SECRET',
url: "https://github.example.com/",
verify_ssl: false,
args: { scope: 'user:email' } }
2017-05-18 14:30:21 -04:00
```
2017-05-22 17:47:31 -04:00
You will also need to disable Git SSL verification on the server hosting GitLab.
2017-05-18 14:30:21 -04:00
2020-03-23 23:09:28 -04:00
```shell
2019-09-10 06:15:43 -04:00
git config --global http.sslVerify false
2017-05-18 14:30:21 -04:00
```
2020-04-21 11:21:10 -04:00
For the changes to take effect, [reconfigure GitLab ](../administration/restart_gitlab.md#omnibus-gitlab-reconfigure ) if you installed
via Omnibus, or [restart GitLab ](../administration/restart_gitlab.md#installations-from-source ) if you installed from source.
2019-12-02 10:06:36 -05:00
## Troubleshooting
### Error 500 when trying to sign in to GitLab via GitHub Enterprise
Check the [`production.log` ](../administration/logs.md#productionlog )
on your GitLab server to obtain further details. If you are getting the error like
`Faraday::ConnectionFailed (execution expired)` in the log, there may be a connectivity issue
2020-04-06 11:10:04 -04:00
between your GitLab instance and GitHub Enterprise. To verify it, [start the rails console ](../administration/troubleshooting/debug.md#starting-a-rails-console-session )
2019-12-16 19:07:59 -05:00
and run the commands below replacing `<github_url>` with the URL of your GitHub Enterprise instance:
2019-12-02 10:06:36 -05:00
```ruby
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))
```
If you are getting a similar `execution expired` error, it confirms the theory about the
network connectivity. In that case, make sure that the GitLab server is able to reach your
GitHub enterprise instance.
### Signing in using your GitHub account without a pre-existing GitLab account is not allowed
If you're getting the message `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` when signing in, in GitLab:
1. Go to your **Profile > Account** .
1. Under the "Social sign-in" section, click **Connect** near the GitHub icon.
After that, you should be able to sign in via GitHub successfully.