

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

# 创建使用 CodeBuild (AWS CLI) 的管道
<a name="how-to-create-pipeline-cli"></a>

使用以下过程创建用于生成源代码 CodeBuild 的管道。

要使用创建用于部署您构建的源代码或仅测试源代码的管道，您可以调整[编辑管道 (AWS CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/how-to-edit-pipelines.html#how-to-edit-pipelines-cli) 中的说明和*AWS CodePipeline 用户指南*中的[CodePipeline管道结构参考](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-structure.html)。 AWS CLI 

1. 在中创建或标识构建项目 CodeBuild。有关更多信息，请参阅 [创建构建项目](create-project.md)。
**重要**  
生成项目必须定义生成输出项目设置（即使 CodePipeline 覆盖它们）。有关更多信息，请参阅[创建构建项目 (AWS CLI)](create-project.md#create-project-cli)中 `artifacts` 的描述。

1. 确保您已 AWS CLI 使用与本主题中 AWS 描述的 IAM 实体之一相对应的访问 AWS 密钥和私有访问密钥配置了。有关更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[开始设置 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)。

1. 创建代表管道结构的 JSON 格式的文件。将文件命名为 `create-pipeline.json` 或类似名称。例如，此 JSON 格式的结构借助引用了 S3 输入存储桶的源操作和使用 CodeBuild 的构建操作创建了管道：

   ```
   {
     "pipeline": {
       "roleArn": "arn:aws:iam::<account-id>:role/<AWS-CodePipeline-service-role-name>",
       "stages": [
         {
           "name": "Source",
           "actions": [
             {
               "inputArtifacts": [],
               "name": "Source",
               "actionTypeId": {
                 "category": "Source",
                 "owner": "AWS",
                 "version": "1",
                 "provider": "S3"
               },
               "outputArtifacts": [
                 {
                   "name": "MyApp"
                 }
               ],
               "configuration": {
                 "S3Bucket": "<bucket-name>",
                 "S3ObjectKey": "<source-code-file-name.zip>"
               },
               "runOrder": 1
             }
           ]
         },
         {
           "name": "Build",
           "actions": [
             {
               "inputArtifacts": [
                 {
                   "name": "MyApp"
                 }
               ],
               "name": "Build",
               "actionTypeId": {
                 "category": "Build",
                 "owner": "AWS",
                 "version": "1",
                 "provider": "CodeBuild"
               },
               "outputArtifacts": [
                 {
                   "name": "default"
                 }
               ],
               "configuration": {
                 "ProjectName": "<build-project-name>"
               },
               "runOrder": 1
             }
           ]
         }
       ],
       "artifactStore": {
         "type": "S3",
         "location": "<CodePipeline-internal-bucket-name>"
       },
       "name": "<my-pipeline-name>",
       "version": 1
     }
   }
   ```

   在此 JSON 格式的数据中：
   + 的值`roleArn`必须与您在先决条件中创建或标识的 CodePipeline 服务角色的 ARN 相匹配。
   + `configuration` 中 `S3Bucket` 和 `S3ObjectKey` 的值假定源代码存储在 S3 存储桶中。有关其他源代码存储库类型的设置，请参阅《*AWS CodePipeline 用户指南*》中的[CodePipeline 管道结构参考](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-structure.html)。
   + 的值`ProjectName`是您在本过程前面创建的 CodeBuild 生成项目的名称。
   + `location` 的值是此管道所用的 S3 存储桶的名称。有关更多信息，请参阅*AWS CodePipeline 用户指南*中的[创建用作 S3 存储桶对象存储 CodePipeline的策略](https://docs.aws.amazon.com/codepipeline/latest/userguide/access-permissions.html#how-to-create-bucket-policy)。
   + `name` 的值是此管道的名称。所有管道名称对您的账户都必须是唯一的。

   尽管这些数据仅描述了源操作和生成操作，但您可以为与测试、部署生成输出构件、调用 AWS Lambda 函数等相关的活动添加操作。有关更多信息，请参阅《AWS CodePipeline 用户指南》**中的 [AWS CodePipeline 管道结构参考](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-structure.html)。

1. 切换到包含 JSON 文件的文件夹，然后运行 CodePipeline**[create-pipeline](https://docs.aws.amazon.com/cli/latest/reference/codepipeline/create-pipeline.html)**命令，指定文件名：

   ```
   aws codepipeline create-pipeline --cli-input-json file://create-pipeline.json
   ```
**注意**  
您必须在支持的 AWS 区域中创建管道。 CodeBuild 有关更多信息，请参阅*Amazon Web Services 一般参考* 中的 [AWS CodeBuild](https://docs.aws.amazon.com/general/latest/gr/rande.html#codebuild_region)。

   JSON 格式的数据出现在输出中，并 CodePipeline 创建管道。

1. 要获取有关管道状态的信息，请运行 CodePipeline **[get-pipeline-state](https://docs.aws.amazon.com/cli/latest/reference/codepipeline/get-pipeline-state.html)**命令，指定管道的名称：

   ```
   aws codepipeline get-pipeline-state --name <my-pipeline-name>
   ```

   在输出中，查找确认构建成功的信息。省略号 (`...`) 用于显示为简洁起见而省略的数据。

   ```
   {
     ...
     "stageStates": [
       ...  
       {
         "actionStates": [
           {
             "actionName": "CodeBuild",
             "latestExecution": {
               "status": "SUCCEEDED",
               ...
             },
             ...
           }
         ]
       }
     ]
   }
   ```

   如果您过早运行此命令，您可能不会看到有关构建操作的信息。您可能需要多次运行此命令，直到管道已完成构建操作的运行。

1. 成功构建后，请按照以下说明操作，获取构建输出项目。打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。
**注意**  
您还可以通过在 ** 控制台的相关构建详细信息页面上选择 **Build artifacts CodeBuild 链接来获取构建输出项目。要前往此页面，请跳过此过程中的剩余步骤，并参阅[查看构建详细信息（控制台）](view-build-details.md#view-build-details-console)。

1. 在存储桶列表中，请打开管道使用的存储桶。此存储桶的名称应遵循格式 `codepipeline-<region-ID>-<random-number>`。您可以从`create-pipeline.json`文件中获取存储桶名称，也可以运行 CodePipeline **get-pipeline**命令来获取存储桶的名称。

   ```
   aws codepipeline get-pipeline --name <pipeline-name>
   ```

    在输出中，该 `pipeline` 对象包含一个 `artifactStore` 对象，其中包含带有存储桶名称的 `location` 值。

1. 打开与您的管道名称相匹配的文件夹 (例如，`<pipeline-name>`)。

1. 在该文件夹中，打开名为 `default` 的文件夹。

1. 提取文件内容。如果该文件夹中有多个文件，请提取具有最新**上一次修改**时间戳的文件的内容。(您可能需要为文件提供 `.zip` 扩展名，这样，您可以将其用于您系统内的 ZIP 实用工具。) 构建输出构件将位于文件的提取内容中。