

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

# 多输入源和输出构件示例
<a name="sample-multi-in-out"></a>

您可以创建具有多个输入源和多个输出构件集的 AWS CodeBuild 构建项目。此示例演示如何设置具有以下特点的构建项目：
+ 使用多个不同类型的源和存储库。
+ 将构建构件发布到单个构建中的多个 S3 存储桶。

 在以下示例中，创建一个构建项目并使用它来运行构建。示例使用构建项目的 buildspec 文件演示如何合并多个源和创建多个构件集。

要了解如何创建使用多个到 CodeBuild 的源输入创建多个输出构件的管道，请参阅[具有多个输入源和输出工件的 CodePipeline/CodeBuild 集成示例](sample-codepipeline.md#sample-pipeline-multi-input-output)。

**Topics**
+ [创建包含多个输入和输出的构建项目](sample-multi-in-out-create.md)
+ [创建没有源的构建项目](no-source.md)

# 创建包含多个输入和输出的构建项目
<a name="sample-multi-in-out-create"></a>

按照以下过程来创建包含多个输入和输出的构建项目。

**创建包含多个输入和输出的构建项目**

1.  将源上传到一个或多个 S3 存储桶、CodeCommit、GitHub、GitHub Enterprise Server 或 Bitbucket 存储库。

1.  选择一个源作为主要源。此源供 CodeBuild 查找和运行 buildspec 文件。

1.  创建构建项目。有关更多信息，请参阅 [在 中创建构建项目AWS CodeBuild](create-project.md)。

1.  创建构建项目、运行构建和获取有关构建的信息。

1.  如果使用 AWS CLI 创建构建项目，则 `create-project` 命令的 JSON 格式输入可能类似于以下内容：

   ```
   {
     "name": "sample-project",
     "source": {
       "type": "S3",
       "location": "<bucket/sample.zip>"
     },
     "secondarySources": [
       {
         "type": "CODECOMMIT",
         "location": "https://git-codecommit.us-west-2.amazonaws.com/v1/repos/repo",
         "sourceIdentifier": "source1"
       },
       {
         "type": "GITHUB",
         "location": "https://github.com/awslabs/aws-codebuild-jenkins-plugin",
         "sourceIdentifier": "source2"
       }
     ],
     "secondaryArtifacts": [ss
       {
         "type": "S3",
         "location": "<output-bucket>",
         "artifactIdentifier": "artifact1"
       },
       {
         "type": "S3",
         "location": "<other-output-bucket>",
         "artifactIdentifier": "artifact2"
       }
     ],
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "aws/codebuild/standard:5.0",
       "computeType": "BUILD_GENERAL1_SMALL"
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```

 主要源在 `source` 属性下定义。所有其他源都称为辅助源，出现在 `secondarySources` 下方。所有辅助源都安装在各自的目录中。目录存储在内置环境变量 `CODEBUILD_SRC_DIR_sourceIdentifer` 中。有关更多信息，请参阅 [构建环境中的环境变量](build-env-ref-env-vars.md)。

 `secondaryArtifacts` 属性包含构件定义列表。这些构件使用 buildspec 文件的 `secondary-artifacts` 块（嵌套在 `artifacts` 块内）。

 buildspec 文件中的辅助构件与构件具有相同的结构，以其构件标识符分隔。

**注意**  
 在 [CodeBuild API](https://docs.aws.amazon.com/codebuild/latest/APIReference/) 中，辅助构件的 `artifactIdentifier` 是 `CreateProject` 和 `UpdateProject` 中的必需属性。必须使用它引用辅助构件。

 使用前面的 JSON 格式的输入，项目的 buildspec 文件可能如下所示：

```
version: 0.2

phases:
  install:
    runtime-versions:
      java: openjdk11
  build:
    commands:
      - cd $CODEBUILD_SRC_DIR_source1
      - touch file1
      - cd $CODEBUILD_SRC_DIR_source2
      - touch file2

artifacts:
  files:
    - '**.*'
  secondary-artifacts:
    artifact1:
      base-directory: $CODEBUILD_SRC_DIR_source1
      files:
        - file1
    artifact2:
      base-directory: $CODEBUILD_SRC_DIR_source2
      files:
        - file2
```

 可以在 `StartBuild` 中使用具有 `sourceVersion` 属性的 API 覆盖主要源的版本。要覆盖一个或多个辅助源版本，请使用 `secondarySourceVersionOverride` 属性。

 `start-build` 中 AWS CLI 命令的 JSON 格式输入可能类似于以下内容：

```
{
   "projectName": "sample-project",
   "secondarySourcesVersionOverride": [
      {
        "sourceIdentifier": "source1",
        "sourceVersion": "codecommit-branch"
      },
      {
        "sourceIdentifier": "source2",
        "sourceVersion": "github-branch"
      },
   ]
}
```

# 创建没有源的构建项目
<a name="no-source"></a>

 配置 CodeBuild 项目时，可以在配置源时选择 **NO\$1SOURCE** 源类型。当您的源类型为 **NO\$1SOURCE** 时，您不能指定 buildspec 文件，因为您的项目没有源。相反，您必须将 JSON 格式输入的 `buildspec` 属性中的 YAML 格式 buildspec 字符串指定给 `create-project` CLI 命令。它可能如下所示：

```
{
  "name": "project-name",
  "source": {
    "type": "NO_SOURCE",
    "buildspec": "version: 0.2\n\nphases:\n  build:\n    commands:\n      - command"
   },
  "environment": {
    "type": "LINUX_CONTAINER",
    "image": "aws/codebuild/standard:5.0",
    "computeType": "BUILD_GENERAL1_SMALL",    
  },
  "serviceRole": "arn:aws:iam::account-ID:role/role-name",
  "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
}
```

有关更多信息，请参阅 [创建构建项目 (AWS CLI)](create-project.md#create-project-cli)。