# Using GitLab CI/CD with a GitHub repository

> 原文：[https://docs.gitlab.com/ee/ci/ci_cd_for_external_repos/github_integration.html](https://docs.gitlab.com/ee/ci/ci_cd_for_external_repos/github_integration.html)

*   [Connect with Personal Access Token](#connect-with-personal-access-token)
*   [Connect manually](#connect-manually)

# Using GitLab CI/CD with a GitHub repository[](#using-gitlab-cicd-with-a-github-repository-premium "Permalink")

通过创建[CI / CD 项目](index.html)将 GitHub 存储库连接到 GitLab，GitLab CI / CD 可与**GitHub.com**和**GitHub Enterprise**一起使用.

观看有关在[GitHub 存储库中使用 GitLab CI / CD 管道](https://www.youtube.com/watch?v=qgl3F2j-1cI)的视频.

**注意：**由于[GitHub 的限制](https://gitlab.com/gitlab-org/gitlab/-/issues/9147) ，不能将[GitHub OAuth](../../integration/github.html#enabling-github-oauth)用于作为外部 CI / CD 存储库的 GitHub 进行身份验证.

## Connect with Personal Access Token[](#connect-with-personal-access-token "Permalink")

**注意：**个人访问令牌只能用于将 GitHub.com 存储库连接到 GitLab，并且 GitHub 用户必须具有[owner 角色](https://help.github.com/en/github/getting-started-with-github/access-permissions-on-github) .

要通过 GitHub 一次性授权以授予 GitLab 访问您的存储库的权限，请执行以下操作：

1.  打开[https://github.com/settings/tokens/new](https://github.com/settings/tokens/new)来创建**个人访问令牌** . 该令牌将用于访问您的存储库并将提交状态推送到 GitHub.

    应该启用`repo`和`admin:repo_hook`以允许 GitLab 访问您的项目，更新提交状态并创建 Web 挂钩以将新提交通知 GitLab.

2.  在 GitLab 中，转到[新项目页面](../../gitlab-basics/create-project.html#create-a-project-in-gitlab) ，选择**CI / CD 作为外部仓库**选项卡，然后单击**GitHub** .

3.  将令牌粘贴到" **个人访问令牌"**字段中，然后单击" **列出存储库"** . 单击" **连接"**以选择存储库.

4.  在 GitHub 中，添加`.gitlab-ci.yml`以[配置 GitLab CI / CD](../quick_start/README.html) .

GitLab 将：

1.  导入项目.
2.  Enable [Pull Mirroring](../../user/project/repository/repository_mirroring.html#pulling-from-a-remote-repository-starter)
3.  Enable [GitHub project integration](../../user/project/integrations/github.html)
4.  在 GitHub 上创建一个 Web 挂钩，以通知 GitLab 新提交.

## Connect manually[](#connect-manually "Permalink")

**注意：**要将**GitHub Enterprise**与**GitLab.com 一起**使用，请使用此方法.

要为您的存储库手动启用 GitLab CI / CD：

1.  在 GitHub 中打开[https://github.com/settings/tokens/new](https://github.com/settings/tokens/new)创建**个人访问令牌.** GitLab 将使用此令牌访问您的存储库并推送提交状态.

    输入**令牌描述**并更新范围以允许：

    `repo`以便 GitLab 可以访问您的项目并更新提交状态

2.  在 GitLab 中，使用 Git URL 选项和 GitHub 存储库的 HTTPS URL 创建一个**CI / CD 项目** . 如果您的项目是私人项目，请使用您刚创建的个人访问令牌进行身份验证.

    GitLab 将自动配置基于轮询的拉镜像.

3.  仍在 GitLab 中，从**"设置">"集成"**启用[GitHub 项目](../../user/project/integrations/github.html) **集成.**

    选中" **活动"**复选框以启用集成，将您的个人访问令牌和 HTTPS 存储库 URL 粘贴到表单中，然后**保存.**

4.  仍在 GitLab 中，创建具有`API`范围的**个人访问令牌** ，以验证 GitHub Web 挂钩，以通知 GitLab 新提交.

5.  在 GitHub 中的**"设置">" Webhooks"中**创建一个 Web 挂钩，以通知 GitLab 新提交.

    应使用我们刚刚创建的 GitLab 个人访问令牌，将 Web 挂钩 URL 设置为 GitLab API 来[触发拉镜像](../../api/projects.html#start-the-pull-mirroring-process-for-a-project-starter) ：

    ```
    https://gitlab.com/api/v4/projects/<NAMESPACE>%2F<PROJECT>/mirror/pull?private_token=<PERSONAL_ACCESS_TOKEN> 
    ```

    选择" **让我选择单个事件"**选项，然后选中" **拉**取**请求**和**推送"**复选框. [对于外部拉取请求的管道，](index.html#pipelines-for-external-pull-requests)需要这些设置.

6.  在 GitHub 中添加`.gitlab-ci.yml`以配置 GitLab CI / CD.