

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 运行 GitHub 企业服务器示例 CodeBuild
<a name="sample-github-enterprise"></a>

AWS CodeBuild 支持将 GitHub 企业服务器作为源存储库。此示例说明在 GitHub 企业服务器存储库安装了证书时如何设置 CodeBuild 项目。它还展示了如何启用 webhook，以便每次将代码更改推送到 GitHub 企业服务器存储库时都能 CodeBuild 重新生成源代码。

**Topics**
+ [先决条件](#sample-github-enterprise-prerequisites)
+ [步骤 1：使用 GitHub 企业服务器创建构建项目并启用 webhook](#sample-github-enterprise-running)

## 先决条件
<a name="sample-github-enterprise-prerequisites"></a>

1. 为您的 CodeBuild 项目生成个人访问令牌。我们建议您创建 GitHub 企业用户并为该用户生成个人访问令牌。将其复制到剪贴板，以便在创建 CodeBuild 项目时使用。有关更多信息，请参阅 GitHub 帮助网站上的[为命令行创建个人访问令牌](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/)。

   在创建个人访问令牌时，请在定义中包含**存储库**范围。  
![\[定义中的存储库范围。\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/scopes.png)

1. 从 GitHub 企业服务器下载您的证书。 CodeBuild 使用该证书与存储库建立可信的 SSL 连接。

   **Linux/macOS 客户端：**

   从终端窗口中运行以下命令：

   ```
   echo -n | openssl s_client -connect HOST:PORTNUMBER \
       | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /folder/filename.pem
   ```

   将命令中的占位符替换为以下值：

   *HOST*。 您的 GitHub 企业服务器存储库的 IP 地址。

   *PORTNUMBER*。 您用于连接的端口号（例如，443）。

   *folder*。 您下载证书的文件夹。

   *filename*。 您的证书文件的文件名。
**重要**  
将证书另存为 .pem 文件。

   **Windows 客户端：**

   使用浏览器从 GitHub 企业服务器下载证书。要查看站点的证书详细信息，请选择挂锁图标。有关如何导出证书的信息，请参阅浏览器文档。
**重要**  
将证书另存为 .pem 文件。

1. 将您的证书文件上传到 S3 存储桶。有关如何创建 S3 存储桶的信息，请参阅[如何创建 S3 存储桶？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html) 有关如何将对象上传到 S3 存储桶的信息，请参阅[如何将文件和文件夹上传至存储桶？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)
**注意**  
此存储桶必须与您的版本位于同一 AWS 区域。例如，如果您指示 CodeBuild 在美国东部（俄亥俄州）地区运行构建，则存储桶必须位于美国东部（俄亥俄州）区域。

## 步骤 1：使用 GitHub 企业服务器创建构建项目并启用 webhook
<a name="sample-github-enterprise-running"></a>

1. 在 [https://console.aws.amazon.com/codesuite/codebuild](https://console.aws.amazon.com/codesuite/codebuild/home) /home 中打开 AWS CodeBuild 控制台。

1.  如果显示 CodeBuild 信息页面，请选择 “**创建构建项目**”。否则，请在导航窗格中，展开**构建**，选择**构建项目**，然后选择**创建构建项目**。

1. 在**项目名称**中，输入此构建项目的名称。每个 AWS 账户中的构建项目名称必须是唯一的。您还可以包含构建项目的可选描述，以帮助其他用户了解此项目的用途。

1. 在**源代码**中，在**源提供程序**中，选择**GitHub 企业服务器**。
   + 选择**管理账户凭证**，然后选择**个人访问令牌**。对于**服务**，请选择 **Secrets Manager（推荐）**，然后配置您的密钥。然后在**GitHub 企业个人访问令牌**中，输入您的个人访问令牌并选择**保存**。
   + 在**存储库 URL** 中，输入您的存储库的路径，包括存储库的名称。
   + 展开**其他配置**。
   + 选择**每次将代码推送到此存储库时都会重建**以便每次将代码推送到此存储库时进行重建。
   + 选择 “**启用不安全 SSL**”，以便在连接到 GitHub 企业服务器项目存储库时忽略 SSL 警告。
**注意**  
建议您仅将**启用不安全的 SSL** 用于测试。它不应在生产环境中使用。  
![\[GitHub 企业服务器项目存储库配置。\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/github-enterprise.png)

1. 在**环境**中：

   对于**环境映像**，执行下列操作之一：
   + 要使用由管理的 Docker 映像 AWS CodeBuild，请选择**托管映像**，然后从 “**操作系统**”、“**运行时**”、“映像” 和 “**映像****版本**” 中进行选择。从**环境类型**中进行选择（如果可用）。
   + 要使用其他 Docker 映像，请选择**自定义映像**。对于**环境类型**，请选择 **ARM**、**Linux**、**Linux GPU** 或 **Windows**。如果您针对**外部注册表 URL** 选择**其他注册表**，请使用 `docker repository/docker image name` 格式在 Docker Hub 中输入 Docker 映像的名称和标签。如果您选择 **Amazon ECR**，请使用**亚马逊 ECR 存储库和** A **mazon ECR 镜像**在您的账户中选择 Docker 镜像。 AWS 
   + 要使用私有 Docker 映像，请选择**自定义映像**。对于**环境类型**，请选择 **ARM**、**Linux**、**Linux GPU** 或 **Windows**。对于**映像注册表**，选择**其他注册表**，然后输入您的私有 Docker 映像的凭证的 ARN。凭证必须由 Secrets Manager 创建。有关更多信息，请参阅《AWS Secrets Manager 用户指南》中的[什么是 AWS Secrets Manager？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/)。

1. 在**服务角色**中，执行下列操作之一：
   + 如果您没有 CodeBuild 服务角色，请选择 “**新建服务角色**”。在**角色名称**中，为新角色输入名称。
   + 如果您有 CodeBuild 服务角色，请选择**现有服务角色**。在**角色 ARN** 中，选择服务角色。
**注意**  
使用控制台创建或更新构建项目时，可以同时创建 CodeBuild 服务角色。默认情况下，这个角色仅能与该构建项目配合使用。如果您使用控制台将此服务角色与另一个构建项目关联，则此角色将更新以便与关联的构建项目结合使用。一个服务角色最多可与 10 个构建项目结合使用。

1. 展开**其他配置**。

   如果您 CodeBuild 想使用您的 VPC，请执行以下操作：
   + 对于 **VPC**，请选择 CodeBuild 使用的 VPC ID。
   + 对于 **VPC 子网**，请选择包含使用的 CodeBuild 资源的子网。
   + 对于 **VPC 安全组**，请选择 CodeBuild 用于允许访问中的资源的安全组 VPCs。

   有关更多信息，请参阅 [AWS CodeBuild 与亚马逊 Virtual Private Cloud 一起使用](vpc-support.md)。

1. 在 **Buildspec** 中，执行以下操作之一：
   + 选择**使用 buildspec 文件**，以在源代码根目录中使用 buildspec.yml 文件。
   + 选择**插入构建命令**，以使用控制台插入构建命令。

   有关更多信息，请参阅[Buildspec 参考](build-spec-ref.md)。

1. 在**构件**中，对于**类型**，执行以下操作之一：
   + 如果您不想创建构建输出构件，请选择**无构件**。
   + 要将构建输出存储在 S3 存储桶中，请选择 **Amazon S3**，然后执行以下操作：
     + 如果要将项目名称用于构建输出 ZIP 文件或文件夹，请将**名称**留空。否则，请输入名称。默认情况下，构件名称是项目名称。如果您要使用其他名称，请在构件名称框中输入该名称。如果您要输出 ZIP 文件，请包含 zip 扩展名。
     + 对于**存储桶名称**，请选择输出存储桶的名称。
     + 如果您在此过程的前面部分选择了**插入构建命令**，对于**输出文件**，请输入构建（该构建要放到构建输出 ZIP 文件或文件夹中）中的文件位置。对于多个位置，使用逗号将各个位置隔开（例如，`appspec.yml, target/my-app.jar`）。有关更多信息，请参阅[buildspec 语法](build-spec-ref.md#build-spec-ref-syntax)中 `files` 的描述。

1. 对于**缓存类型**，请选择下列选项之一：
   + 如果您不想使用缓存，请选择**无缓存**。
   + 如果要使用 Amazon S3 缓存，请选择 **Amazon S3**，然后执行以下操作：
     + 对于**存储桶**，选择存储缓存的 S3 存储桶的名称。
     + （可选）对于**缓存路径前缀**，输入 Amazon S3 路径前缀。**缓存路径前缀**值类似于目录名称。它使您能够在存储桶的同一目录下存储缓存。
**重要**  
请勿将尾部斜杠 (/) 附加到路径前缀后面。
   +  如果想要使用本地缓存，请选择**本地**，然后选择一个或多个本地缓存模式。
**注意**  
Docker 层缓存模式仅适用于 Linux。如果您选择该模式，您的项目必须在特权模式下运行。

   使用缓存可节省大量构建时间，因为构建环境的可重用部分被存储在缓存中，并且可跨构建使用。有关在 buildspec 文件中指定缓存的信息，请参阅[buildspec 语法](build-spec-ref.md#build-spec-ref-syntax)。有关缓存的更多信息，请参阅 [缓存构建以提高性能](build-caching.md)。

1. 选择 **Create build project（创建构建项目）**。在构建项目页面上，选择**开始构建**。