

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

# 的第三方源代码库示例 CodeBuild
<a name="sample-third-party-source"></a>

本节介绍第三方源代码库与之间的集成示例。 CodeBuild


| 样本 | 说明 | 
| --- | --- | 
|  BitBucket 拉取请求和 webhook 过滤器示例 — 参见 [运行 “Bitbucket 拉取请求和 webhook 过滤器” 示例 CodeBuild](sample-bitbucket-pull-request.md)  |  此示例向您演示如何使用 Bitbucket 存储库创建拉取请求。它还向您演示如何使用 Bitbucket Webhook 来触发 CodeBuild 创建一个项目的生成。  | 
|  GitHub 企业服务器示例 — 参见 [运行 GitHub 企业服务器示例 CodeBuild](sample-github-enterprise.md)  |  此示例向您展示在 GitHub 企业服务器存储库安装了证书时如何设置 CodeBuild 项目。它还展示了如何启用 webhook，以便每次将代码更改推送到 GitHub 企业服务器存储库时都能 CodeBuild 重新生成源代码。  | 
|  GitHub 拉取请求和 webhook 过滤器示例 — 参见 [运行 GitHub 拉取请求和 webhook 过滤器示例 CodeBuild](sample-github-pull-request.md)  |  此示例向您展示如何使用 GitHub企业服务器存储库创建拉取请求。它还展示了如何启用 webhook，以便每次将代码更改推送到 GitHub 企业服务器存储库时都能 CodeBuild 重新生成源代码。  | 

# 运行 “Bitbucket 拉取请求和 webhook 过滤器” 示例 CodeBuild
<a name="sample-bitbucket-pull-request"></a>

AWS CodeBuild 当源存储库为 Bitbucket 时，支持 webhook。这意味着，对于源代码存储在 Bitbucket 存储库中的 CodeBuild 构建项目，每次将代码更改推送到存储库时，都可以使用 webhook 来重建源代码。有关更多信息，请参阅 [Bitbucket Webhook 事件](bitbucket-webhook.md)。

此示例向您演示如何使用 Bitbucket 存储库创建拉取请求。它还向你展示了如何使用 Bitbucket webhook CodeBuild 来触发创建项目的构建。

**注意**  
使用 webhook 时，用户可能会触发意外构建。要降低这种风险，请参阅[使用 Webhook 的最佳实操](webhooks.md#webhook-best-practices)。

**Topics**
+ [先决条件](#sample-bitbucket-pull-request-prerequisites)
+ [步骤 1：使用 Bitbucket 创建构建项目并启用 webhook](#sample-bitbucket-pull-request-create)
+ [步骤 2：使用 Bitbucket webhook 触发构建](#sample-bitbucket-pull-request-trigger)

## 先决条件
<a name="sample-bitbucket-pull-request-prerequisites"></a>

 要运行此示例，您必须将您的 AWS CodeBuild 项目与 Bitbucket 账户关联起来。

**注意**  
 CodeBuild 已更新其使用 Bitbucket 的权限。如果您之前将项目连接到 Bitbucket，但现在收到 Bitbucket 连接错误，则必须重新连接才能授予管理您的 webh CodeBuild ook 的权限。

## 步骤 1：使用 Bitbucket 创建构建项目并启用 webhook
<a name="sample-bitbucket-pull-request-create"></a>

 以下步骤介绍如何使用 Bitbucket 作为源存储库创建 AWS CodeBuild 项目并启用 webhook。

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

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

1. 选择**创建构建项目**。

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

1. 在**源**中：  
**源提供商**  
选择 **Bitbucket**。按照说明连接（或重新连接）Bitbucket，然后选择**授权**。  
**存储库**  
选择**我的 Bitbucket 账户中的存储库**。  
如果您之前未连接过 Bitbucket 账户，请输入您的 Bitbucket 用户名和应用程序密码，然后选择**保存 Bitbucket 凭证**。  
**Bitbucket 存储库**  
输入 Bitbucket 存储库的 URL。

1. 在**主要源 webhook 事件**中，选择以下内容。
**注意**  
只有在上一步中选择了**我的 Bitbucket 账户中的存储库**，**主要源 Webhook 事件**部分才可见。

   1. 创建项目时，选择**每次将代码更改推送到此存储库时都会重新构建**。

   1. 从**事件类型**中，选择一个或多个事件。

   1. 要在事件触发构建时进行筛选，请在**在这些条件下开始构建**下，添加一个或多个可选筛选条件。

   1. 要在未触发事件时进行筛选，请在**在这些条件下不开始构建**下，添加一个或多个可选筛选条件。

   1. 选择**添加筛选条件组**，以添加另一个筛选条件组（如果需要）。

   有关 Bitbucket webhook 事件类型和筛选的更多信息，请参阅 [Bitbucket Webhook 事件](bitbucket-webhook.md)。

1. 在**环境**中：  
**环境映像**  
选择下列选项之一：    
要使用由 AWS CodeBuild以下管理的 Docker 镜像，请执行以下操作：  
选择**托管映像**，然后选择**操作系统**、**运行时**、**映像**和**映像版本**。从**环境类型**中进行选择（如果可用）。  
要使用其他 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？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) 在《*AWS Secrets Manager 用户指南》*中。  
**服务角色**  
选择下列选项之一：  
   + 如果您没有 CodeBuild 服务角色，请选择 “**新建服务角色**”。在**角色名称**中，为新角色输入名称。
   + 如果您有 CodeBuild 服务角色，请选择**现有服务角色**。在**角色 ARN** 中，选择服务角色。
使用控制台创建或更新构建项目时，可以同时创建 CodeBuild 服务角色。默认情况下，这个角色仅能与该构建项目配合使用。如果您使用控制台将此服务角色与另一个构建项目关联，则此角色将更新以便与关联的构建项目结合使用。一个服务角色最多可与 10 个构建项目结合使用。

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. 选择 **Create build project（创建构建项目）**。在**审核**页面上，选择**开始构建**以运行构建。

## 步骤 2：使用 Bitbucket webhook 触发构建
<a name="sample-bitbucket-pull-request-trigger"></a>

对于使用 Bitbucket webhook 的项目，当 Bitbucket 存储库检测到您的源代码发生变化时，会 AWS CodeBuild 创建一个构建。

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

1. 在导航窗格上，选择**构建项目**，然后选择项目以与 Bitbucket 存储库和 Webhook 关联。有关创建 Bitbucket webhook 项目的信息，请参阅[步骤 1：使用 Bitbucket 创建构建项目并启用 webhook](#sample-bitbucket-pull-request-create)。

1. 在您项目的 Bitbucket 存储库中更改一些代码。

1. 在 Bitbucket 存储库上创建拉取请求。有关更多信息，请参阅[发出拉取请求](https://www.atlassian.com/git/tutorials/making-a-pull-request)。

1. 在 Bitbucket Webhook 页面上，选择**查看请求**，以查看最新事件的列表。

1. 选择**查看详细信息**以查看返回的响应的详细信息 CodeBuild。其内容如下所示：

   ```
   "response":"Webhook received and build started: https://us-east-1.console.aws.amazon.com/codebuild/home..."
   "statusCode":200
   ```

1. 导航到 Bitbucket 拉取请求页面以查看构建的状态。

# 运行 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（创建构建项目）**。在构建项目页面上，选择**开始构建**。

# 运行 GitHub 拉取请求和 webhook 过滤器示例 CodeBuild
<a name="sample-github-pull-request"></a>

AWS CodeBuild 当源存储库为时，支持 webhook。 GitHub这意味着，对于源代码存储在存储 GitHub 库中的 CodeBuild 构建项目，每次将代码更改推送到存储库时，都可以使用 webhook 来重建源代码。有关 CodeBuild 示例，请参阅[AWS CodeBuild 示例](https://github.com/aws-samples/aws-codebuild-samples)。

**注意**  
使用 webhook 时，用户可能会触发意外构建。要降低这种风险，请参阅[使用 Webhook 的最佳实操](webhooks.md#webhook-best-practices)。

**Topics**
+ [第 1 步：使用 GitHub 并启用 webhook 创建构建项目](#sample-github-pull-request-running)
+ [步骤 2：确认已启用 webhook](#verification-checks)

## 第 1 步：使用 GitHub 并启用 webhook 创建构建项目
<a name="sample-github-pull-request-running"></a>

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

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

1. 选择**创建构建项目**。

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

1. 在**源**中：  
**源提供商**  
选择 **GitHub**。按照说明进行连接（或重新连接）， GitHub 然后选择 “**授权**”。  
**存储库**  
**在我的 GitHub账户中选择 “存储库”**。  
**GitHub repository**  
输入 GitHub 存储库的 URL。

1. 在**主要源 webhook 事件**中，选择以下内容。
**注意**  
只有在上一步中选择了**我的 GitHub 账户中的 “存储库**” 时，“**主要来源 webhook 事件**” 部分才可见。

   1. 创建项目时，选择**每次将代码更改推送到此存储库时都会重新构建**。

   1. 从**事件类型**中，选择一个或多个事件。

   1. 要在事件触发构建时进行筛选，请在**在这些条件下开始构建**下，添加一个或多个可选筛选条件。

   1. 要在未触发事件时进行筛选，请在**在这些条件下不开始构建**下，添加一个或多个可选筛选条件。

   1. 选择**添加筛选条件组**，以添加另一个筛选条件组（如果需要）。

   有关 GitHub webhook 事件类型和过滤器的更多信息，请参阅[GitHub webhook 事件](github-webhook.md)。

1. 在**环境**中：  
**环境映像**  
选择下列选项之一：    
要使用由 AWS CodeBuild以下人员管理的 Docker 镜像，请执行以下操作：  
选择**托管映像**，然后选择**操作系统**、**运行时**、**映像**和**映像版本**。从**环境类型**中进行选择（如果可用）。  
要使用其他 Docker 映像：  
选择**自定义映像**。对于**环境类型**，请选择 **ARM**、**Linux**、**Linux GPU** 或 **Windows**。如果您针对**外部注册表 URL** 选择**其他注册表**，请使用 `docker repository/docker image name` 格式在 Docker Hub 中输入 Docker 映像的名称和标签。如果您选择 **Amazon ECR**，请使用 **Amazon ECR 存储库**和 **Amazon ECR 映像**在您的 AWS 账户中选择 Docker 映像。  
要使用私有 Docker 映像，请执行以下操作：  
选择**自定义映像**。对于**环境类型**，请选择 **ARM**、**Linux**、**Linux GPU** 或 **Windows**。对于**映像注册表**，选择**其他注册表**，然后输入您的私有 Docker 映像的凭证的 ARN。凭证必须由 Secrets Manager 创建。有关更多信息，请参阅[什么是 AWS Secrets Manager？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) 在《*AWS Secrets Manager 用户指南》*中。  
**服务角色**  
选择下列选项之一：  
   + 如果您没有 CodeBuild 服务角色，请选择 “**新建服务角色**”。在**角色名称**中，为新角色输入名称。
   + 如果您有 CodeBuild 服务角色，请选择**现有服务角色**。在**角色 ARN** 中，选择服务角色。
使用控制台创建或更新构建项目时，可以同时创建 CodeBuild 服务角色。默认情况下，这个角色仅能与该构建项目配合使用。如果您使用控制台将此服务角色与另一个构建项目关联，则此角色将更新以便与关联的构建项目结合使用。一个服务角色最多可与 10 个构建项目结合使用。

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. 选择 **Create build project（创建构建项目）**。在**审核**页面上，选择**开始构建**以运行构建。

## 步骤 2：确认已启用 webhook
<a name="verification-checks"></a>

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

1. 在导航窗格中，选择**构建项目**。

1. 请执行以下操作之一：
   + 选择带有要验证的 Webhook 的构建项目的链接，然后选择**构建详细信息**。
   + 选择带有要验证的 Webhook 的构建项目旁边的按钮，选择**查看详细信息**，然后选择**构建详细信息**选项卡。

1. 在**主要源 Webhook 事件**中，选择 **Webhook** URL 链接。

1. 在存储 GitHub 库中，在 **“设置”** 页面的 “**Webhooks**” 下，确认已选中 “**拉取请求**和**推送**”。

1. **在您的个人 GitHub 资料设置中，在 **“个人设置”、“ OAuth****应用程序”、“授权应用程序**” 下，您应该看到您的应用程序已被授权访问您选择的 AWS 区域。**

# 教程：Apple 在 CodeBuild 使用 S3 进行证书存储时使用 Fastlane 进行代码签名
<a name="sample-fastlane"></a>

[fastlane](https://docs.fastlane.tools/) 是一款流行的开源自动化工具，可自动部署和发布 iOS 和 Android 应用程序的测试版。它可以处理所有繁琐的任务，例如生成屏幕截图、处理代码签名和发布应用程序等。

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

要完成本教程，您首先必须设置以下条件：
+ 一个 AWS 账户
+ [Apple 开发人员账户](https://developer.apple.com/)
+ 用于存储证书的 S3 存储桶
+ 在您的项目中安装的 fastlane - fastlane 安装[指南](https://docs.fastlane.tools/getting-started/ios/setup/)

## 步骤 1：在本地计算机上使用 S3 设置 Fastlane Match
<a name="sample-fastlane-S3"></a>

[Fastlane Match](https://docs.fastlane.tools/actions/match/) 是 [Fastlane 工具](https://fastlane.tools/)之一，它允许在本地开发环境和本地开发环境中无缝配置代码签名。 CodeBuildFastlane Match 将您的所有代码签名证书和配置文件存储在 Git repository/S3 Bucket/Google 云存储中，并在需要时下载和安装必要的证书和配置文件。

在此示例配置中，您将设置并使用 Amazon S3 存储桶进行存储。

****

1. 在项目中初始化匹配：

   ```
   fastlane match init
   ```

1. 出现提示时，选择 S3 作为存储模式。

1. 更新“*Matchfile*”以使用 S3：

   ```
   storage_mode("s3")
      s3_bucket("your-s3-bucket-name")
      s3_region("your-aws-region")
      type("appstore") # The default type, can be: appstore, adhoc, enterprise or development
   ```

## 步骤 2：设置 Fastfile
<a name="sample-fastlane-S3-fastfile"></a>

使用以下通道创建或更新您的“Fastfile”。

开启 CodeBuild，每次构建和签署应用程序时，都需要运行 Fastlane Match。执行此操作的最简单方法是将 `match` 操作添加到构建应用程序的通道中。

```
default_platform(:ios)

platform :ios do
  before_all do
    setup_ci
  end
  
  desc "Build and sign the app"
  lane :build do
    match(type: "appstore", readonly: true)
    gym(
      scheme: "YourScheme",
      export_method: "app-store"
    )
  end
end
```

**注意**  
请务必将 `setup_ci` 添加至 `Fastfile` 中的 `before_all ` 部分，以使匹配操作正常运行。这样可以确保使用具有适当权限的临时 Fastlane 密钥链。如果不使用它，您可能会看到构建失败或结果不一致。



## 步骤 3：运行 `fastlane match` 命令以生成相应的证书和配置文件
<a name="sample-fastlane-S3-certificates"></a>

给定类型（即开发、应用商店、临时、企业）的 fastlane match 命令将生成证书和配置文件（如果远程存储中未提供）。fastlane 将证书和配置文件存储在 S3 中。

```
bundle exec fastlane match appstore
```

命令执行将是交互式的，fastlane 将要求设置密码短语来解密证书。

## 步骤 4：为项目创建应用程序文件
<a name="sample-fastlane-S3-appfile"></a>

根据项目的需要创建或添加应用程序文件。

****

1. 根据项目构建要求创建或添加 [Gymfile](http://docs.fastlane.tools/actions/gym/#gymfile)、[Appfile](http://docs.fastlane.tools/advanced/Appfile/)、[Snapfile](http://docs.fastlane.tools/actions/snapshot/#snapfile)、[Deliverfile](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile)。

1. 将更改提交到远程存储库

## 步骤 5：在 Secrets Manager 中创建环境变量
<a name="sample-fastlane-S3-secrets"></a>

创建两个用于存储 fastlane 会话 cookie 和匹配密码短语的密钥。有关在 Secrets Manager 中创建密钥的更多信息，请参阅[创建 AWS Secrets Manager 密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)。

****

1. 按如下方式访问 fastlane 会话 cookie。

   1. 秘密密钥：`FASTLANE_SESSION`

   1. 密钥值：在本地计算机上运行以下命令时生成的会话 cookie。
**注意**  
完成身份验证后，此值会保存在本地文件 `~/.fastlane/spaceship/my_appleid_username/cookie` 中。

      ```
      fastlane spaceauth -u <apple account>
      ```

1. Fastlane Match 密码短语-要使 Fastlane Match 能够解密存储在 S3 存储桶中的证书和配置文件，必须将您在匹配设置步骤中配置的加密密码添加到项目的环境变量中。 CodeBuild

   1. 秘密密钥：`MATCH_PASSWORD`

   1. 密钥值：*<match passphrase to decrypt certificates>*。密码短语是在步骤 3 中生成证书时设置的。

**注意**  
在 Secrets Manager 中创建上述密钥时，请记得提供一个带有以下前缀的密钥名称：`/CodeBuild/`

## 步骤 6：创建计算实例集
<a name="sample-fastlane-S3-fleet"></a>

为您的项目创建计算实例集。

****

1. 在控制台中，前往 CodeBuild 并创建新的计算队列。

1. 选择“macOS”作为操作系统，然后选择适当的计算类型和映像。

## 第 7 步：在中创建项目 CodeBuild
<a name="sample-fastlane-S3-project"></a>

在中创建您的项目 CodeBuild。



****

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

1. 创建构建项目。有关信息，请参阅[创建构建项目（控制台）](create-project.md#create-project-console)和[运行构建（控制台）](run-build-console.md)。

1. 设置您的源提供商（例如 GitHub， CodeCommit）。这是 iOS 项目源存储库，而不是证书存储库。

1.  在**环境**中：
   + 选择**预留容量**。
   + 对于**实例集**，选择上面创建的实例集。
   + 提供 CodeBuild 将为您创建的服务角色的名称。
   + 提供以下环境变量。
     + 名称:`MATCH_PASSWORD`，值：*<secrets arn>*，类型：Secrets Manager（在步骤 5 中为 MATCH\$1PASSWORD 创建的 Secrets ARN）
     + 名称:`FASTLANE_SESSION`，值：*<secrets arn>*，类型：Secrets Manager（在步骤 5 中为 FASTLANE\$1SESSION 创建的 Secrets ARN）

1. 在 **Buildspec** 中，添加以下内容：

   ```
   version: 0.2
   
   phases:
     install:
       commands:
         - gem install bundler
         - bundle install
     build:
       commands:
         - echo "Building and signing the app..."
         - bundle exec fastlane build
     post_build:
       commands:
         - echo "Build completed on date"
   
   artifacts:
     files:
       - '*/.ipa'
     name: app-$(date +%Y-%m-%d)
   ```

## 步骤 8：配置 IAM 角色
<a name="sample-fastlane-S3-role"></a>

创建项目后，请确保 CodeBuild 项目的服务角色有权访问包含证书的 S3 存储桶。将下面的策略附加到该角色：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::your-s3-bucket-name"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::your-s3-bucket-name/*"
        }
    ]
}
```

------

## 第 9 步：运行构建
<a name="sample-fastlane-S3-run"></a>

运行构建。您可以查看构建状态并登录 CodeBuild。

作业完成后，您将能够查看该作业的日志。

## 问题排查
<a name="sample-fastlane-S3-troubleshooting"></a>
+ 如果您在获取证书时遇到问题，请确保您的 IAM 权限设置正确，以便能够访问 S3。
+ 如果您在证书解密时遇到问题，请确保在 MATCH\$1PASSWORD 环境变量中设置了正确的密码短语。
+ 对于代码签名问题，请验证您的 Apple 开发人员账户是否具有必要的证书和配置文件，并且 Xcode 项目中的捆绑包标识符是否与预调配配置文件中的捆绑包标识符匹配。

## 安全注意事项
<a name="sample-fastlane-considerations"></a>

以下是本教程的安全注意事项。
+ 确保您的 S3 存储桶具有适当的安全设置，包括静态加密。特别是，请确保存储桶没有公共访问权限， CodeBuild 并限制仅访问需要访问权限的系统。
+ 考虑使用来存储敏感信息 AWS Secrets Manager ，例如 MATCH\$1PASSWORD 和 FASTLANE\$1SESSION。

此示例提供了 CodeBuild 使用 Amazon S3 进行证书存储时使用 Fastlane 进行 iOS 代码签名的设置。您可能需要根据具体的项目要求和 CodeBuild 环境调整一些步骤。这种方法利用 AWS 服务来增强 AWS 生态系统中的安全性和集成。

# 教程：Apple CodeBuild 使用 Fastlane 进行代码签名 GitHub 用于证书存储
<a name="sample-fastlane-github"></a>

[fastlane](https://docs.fastlane.tools/) 是一款流行的开源自动化工具，可自动部署和发布 iOS 和 Android 应用程序的测试版。它可以处理所有繁琐的任务，例如生成屏幕截图、处理代码签名和发布应用程序等。

此示例演示了如何在 Mac 舰队上运行的 CodeBuild项目中使用 Fastlane 设置 Apple 代码签名，并将其 GitHub 作为证书和配置文件的存储空间。

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

要完成本教程，您首先必须设置以下条件：
+ 一个 AWS 账户
+ [Apple 开发人员账户](https://developer.apple.com/)
+ 用于 GitHub 存储证书的私有存储库
+ 在您的项目中安装的 fastlane - fastlane 安装[指南](https://docs.fastlane.tools/getting-started/ios/setup/)

## 第 1 步：在本地计算机上设置 Fastlane GitHub Match
<a name="sample-fastlane-github-certificates"></a>

[Fastlane Match](https://docs.fastlane.tools/actions/match/) 是 [Fastlane 工具](https://fastlane.tools/)之一，它允许在本地开发环境和本地开发环境中无缝配置代码签名。 CodeBuildFastlane Match 将您的所有代码签名证书和配置文件存储在 Git repository/S3 Bucket/Google 云存储中，并在需要时下载和安装必要的证书和配置文件。

在此示例配置中，我们设置并使用 Git 存储库进行存储。

****

1. 在项目中初始化匹配：

   ```
   fastlane match init
   ```

1. 出现提示时，选择 GitHub 作为存储模式。

1. 更新你的 “*匹配文件*” 以使用 GitHub：

   ```
   git_url("https://github.com/your-username/your-certificate-repo.git")
   storage_mode("git")
   type("development") # The default type, can be: appstore, adhoc, enterprise or development
   ```

**注意**  
请务必输入 Git 存储库的 HTTPS URL，以便 fastlane 成功进行身份验证和克隆。否则，当您尝试使用匹配时，可能会看到身份验证错误。

## 步骤 2：设置 Fastfile
<a name="sample-fastlane-github-fastfile"></a>

使用以下通道创建或更新您的“Fastfile”。

开启 CodeBuild，每次构建和签署应用程序时，都需要运行 Fastlane Match。执行此操作的最简单方法是将 `match` 操作添加到构建应用程序的通道中。

```
default_platform(:ios)

platform :ios do
  before_all do
    setup_ci
  end
  
  desc "Build and sign the app"
  lane :build do
    match(type: "appstore", readonly: true)
    gym(
      scheme: "YourScheme",
      export_method: "app-store"
    )
  end
end
```

**注意**  
请务必将 `setup_ci` 添加至 `Fastfile` 中的 `before_all ` 部分，以使匹配操作正常运行。这样可以确保使用具有适当权限的临时 Fastlane 密钥链。如果不使用它，您可能会看到构建失败或结果不一致。

## 步骤 3：运行 `fastlane match` 命令以生成相应的证书和配置文件
<a name="sample-fastlane-github-certificates"></a>

给定类型（即开发、应用商店、临时、企业）的 fastlane match 命令将生成证书和配置文件（如果远程存储中未提供）。证书和配置文件将 GitHub 由 fastlane 存储在中。

```
bundle exec fastlane match appstore
```

命令执行将是交互式的，fastlane 将要求设置密码短语来解密证书。

## 步骤 4：为项目创建应用程序文件
<a name="sample-fastlane-github-appfile"></a>

根据项目的需要创建或添加应用程序文件。

****

1. 根据项目构建要求创建或添加 [Gymfile](http://docs.fastlane.tools/actions/gym/#gymfile)、[Appfile](http://docs.fastlane.tools/advanced/Appfile/)、[Snapfile](http://docs.fastlane.tools/actions/snapshot/#snapfile)、[Deliverfile](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile)。

1. 将更改提交到远程存储库。

## 步骤 5：在 Secrets Manager 中创建环境变量
<a name="sample-fastlane-github-secrets"></a>

创建三个用于存储 fastlane 会话 cookie 和匹配密码短语的密钥。有关在 Secrets Manager 中创建密钥的更多信息，请参阅[创建 AWS Secrets Manager 密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)。

****

1. 按如下方式访问 fastlane 会话 cookie。

   1. 秘密密钥：`FASTLANE_SESSION`

   1. 密钥值：在本地计算机上运行以下命令时生成的会话 cookie。
**注意**  
完成身份验证后，此值会保存在本地文件 `~/.fastlane/spaceship/my_appleid_username/cookie` 中。

      ```
      fastlane spaceauth -u <Apple_account>
      ```

1. Fastlane Match 密码短语-要启用 Fastlane Match 来解密存储在 Git 存储库中的证书和配置文件，必须将您在匹配设置步骤中配置的加密密码添加到项目的环境变量中。 CodeBuild 

   1. 秘密密钥：`MATCH_PASSWORD`

   1. 密钥值：`<match passphrase to decrypt certificates>`。密码短语是在步骤 3 中生成证书时设置的。

1. Fastlane `MATCH_GIT_BASIC_AUTHORIZATION`：为*匹配*设置基本授权：

   1. 秘密密钥：

      `MATCH_GIT_BASIC_AUTHORIZATION`

   1. 密钥值：该值应是您的用户名和个人访问令牌（PAT）的 base64 编码字符串，格式为 `username:password`。您可以使用以下命令生成它：

      ```
      echo -n your_github_username:your_personal_access_token | base64
      ```

      你可以在 GitHub 主机的 “我的个人资料” > “设置” > “**开发者设置” > “个人访问令牌” 中生成 P** AT。有关更多信息，请参阅以下指南：[https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)。

**注意**  
在 Secrets Manager 中创建上述密钥时，请记得提供一个带有以下前缀的密钥名称：`/CodeBuild/`

## 步骤 6：创建计算实例集
<a name="sample-fastlane-github-fleet"></a>

为您的项目创建计算实例集。

****

1. 在控制台中，前往 CodeBuild 并创建新的计算队列。

1. 选择 `macOS` 作为操作系统，然后选择适当的计算类型和映像。

## 第 7 步：在中创建项目 CodeBuild
<a name="sample-fastlane-github-project"></a>

在中创建您的项目 CodeBuild。

****

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

1. 创建构建项目。有关信息，请参阅[创建构建项目（控制台）](create-project.md#create-project-console)和[运行构建（控制台）](run-build-console.md)。

1. 设置您的源提供商（例如 GitHub， CodeCommit）。这是 iOS 项目源存储库，而不是证书存储库。

1.  在**环境**中：
   + 选择**预留容量**。
   + 对于**实例集**，选择上面创建的实例集。
   + 提供 CodeBuild 将为您创建的服务角色的名称。
   + 提供以下环境变量。
     + 名称:`MATCH_PASSWORD`，值：*<secrets arn>*，类型：Secrets Manager（在步骤 5 中为 MATCH\$1PASSWORD 创建的 Secrets ARN）
     + 名称:`FASTLANE_SESSION`，值：*<secrets arn>*，类型：Secrets Manager（在步骤 5 中为 FASTLANE\$1SESSION 创建的 Secrets ARN）
     + 名称:`MATCH_GIT_BASIC_AUTHORIZATION`，值：*<secrets ARN>*，类型：Secrets Manager Secrets ARN（在步骤 5 中为创建的）`MATCH_GIT_BASIC_AUTHORIZATION`

1. 在 **Buildspec** 中，添加以下内容：

   ```
   version: 0.2
   
   phases:
     install:
       commands:
         - gem install bundler
         - bundle install
     build:
       commands:
         - echo "Building and signing the app..."
         - bundle exec fastlane build
     post_build:
       commands:
         - echo "Build completed on date"
   
   artifacts:
     files:
       - '*/.ipa'
     name: app-$(date +%Y-%m-%d)
   ```

## 第 8 步：运行构建
<a name="sample-fastlane-github-run"></a>

运行构建。您可以查看构建状态并登录 CodeBuild。

作业完成后，您将能够查看该作业的日志。

## 问题排查
<a name="sample-fastlane-github-troubleshooting"></a>
+ 如果您在访问 GitHub 存储库时遇到问题，请仔细检查您的个人访问令牌和 MATCH\$1GIT\$1BASIC\$1AUTHORIZATION 环境变量。
+ 如果您在证书解密时遇到问题，请确保在 MATCH\$1PASSWORD 环境变量中设置了正确的密码短语。
+ 对于代码签名问题，请验证您的 Apple 开发人员账户是否具有必要的证书和配置文件，并且 Xcode 项目中的捆绑包标识符是否与预调配配置文件中的捆绑包标识符匹配。

## 安全注意事项
<a name="sample-fastlane-github-considerations"></a>

以下是本教程的安全注意事项。
+ 将您的证书 GitHub 存储库保密，并定期审核访问权限。
+ 考虑使用来存储敏感信息 AWS Secrets Manager ，例如 MATCH\$1PASSWORD 和 FASTLANE\$1SESSION。

此示例提供了 CodeBuild 使用 Fastlane 进行 iOS 代码签名的设置， GitHub用于证书存储。您可能需要根据具体的项目要求和 CodeBuild 环境调整一些步骤。这种方法利用 AWS 服务来增强 AWS 生态系统中的安全性和集成。