

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

# AWS CodeBuild 编译和测试操作参考
<a name="action-reference-CodeBuild"></a>

允许您将构建和测试作为管道的一部分来运行。当您运行生成或测试操作时， CodeBuild 构建规范中指定的命令将在 CodeBuild 容器内运行。所有被指定为 CodeBuild 操作输入构件的构件都可以在运行命令的容器内使用。 CodeBuild 可以提供生成或测试操作。有关更多信息，请参阅 [AWS CodeBuild 《用户指南》](https://docs.aws.amazon.com/codebuild/latest/userguide/)。

当您在控制台中使用 CodePipeline 向导创建构建项目时， CodeBuild 构建项目显示源提供商是 CodePipeline。当您在 CodeBuild控制台中创建构建项目时，您无法指定 CodePipeline 为源提供商，但是将生成操作添加到管道中会调整 CodeBuild 控制台中的源代码。有关更多信息，请参阅《AWS CodeBuild API Reference》**中的 [ProjectSource](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectSource.html)。

**Topics**
+ [操作类型](#action-reference-CodeBuild-type)
+ [配置参数](#action-reference-CodeBuild-config)
+ [输入构件](#action-reference-CodeBuild-input)
+ [输出构件](#action-reference-CodeBuild-output)
+ [输出变量](#action-reference-CodeBuild-variables)
+ [服务角色权限： CodeBuild 操作](#edit-role-codebuild)
+ [行动声明（CodeBuild 示例）](#action-reference-CodeBuild-example)
+ [另请参阅](#action-reference-CodeBuild-links)

## 操作类型
<a name="action-reference-CodeBuild-type"></a>
+ 类别：`Build` 或 `Test`
+ 拥有者：`AWS`
+ 提供方：`CodeBuild`
+ 版本：`1`

## 配置参数
<a name="action-reference-CodeBuild-config"></a>

**ProjectName**  
是否必需：是  
`ProjectName`是中构建项目的名称 CodeBuild。

**PrimarySource**  
必需：条件  
`PrimarySource`参数的值必须是操作的其中一个输入对象的名称。 CodeBuild 查找 buildspec 文件并在包含此工件解压缩版本的目录中运行 buildspec 命令。  
如果为一个 CodeBuild 操作指定了多个输入构件，则此参数是必需的。当操作仅有一个源构件时，`PrimarySource` 构件默认为该构件。

**BatchEnabled**  
必需：否  
`BatchEnabled` 参数的布尔值允许操作在同一个构建执行中运行多个构建。  
启用此选项后，`CombineArtifacts` 选项将变为可用。  
有关启用批量构建的管道示例，请参阅与[CodePipeline 集成 CodeBuild 和批量构建](https://docs.aws.amazon.com/codebuild/latest/userguide/sample-pipeline-batch.html)。

**BuildspecOverride**  
必需：否  
内联 buildspec 定义或覆盖构建项目中定义的最新声明的 buildspec 文件声明（仅限此构建）。在项目中定义的 buildspec 保持不变。  
如果此值已设置，则可能是以下任意一种：  
+ 内联 buildspec 定义。有关更多信息，请参阅 [Buildspec 语法](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-syntax)中的语法参考。
+ 指向相对于内置 `CODEBUILD_SRC_DIR` 环境变量的值的替代 buildspec 文件的路径，或者是指向 S3 存储桶的路径。存储桶必须与构建项目位于同一 AWS 区域 中。使用其 ARN 指定 buildspec 文件（例如，`arn:aws:s3:::my-codebuild-sample2/buildspec.yml`）。如果此值未提供或设置为空字符串，源代码必须在其根目录中包含 buildspec 文件。有关添加路径的更多信息，请参阅 [Buildspec 文件名和存储位置](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-name-storage)。
由于此属性允许您更改将在容器中运行的构建命令，因此您应该注意，能够调用此 API 并设置此参数的 IAM 主体可以覆盖默认设置。此外，我们鼓励您使用值得信赖的 buildspec 位置，例如源存储库或 Amazon S3 存储桶中的文件。

**CombineArtifacts**  
必需：否  
`CombineArtifacts` 参数的布尔值将来自一个批量构建的所有构建构件合并为单个构件文件，将其用于构建操作。  
要使用此选项，必须启用 `BatchEnabled` 参数。

**EnvironmentVariables**  
必需：否  
此参数的值用于为管道中的 CodeBuild 操作设置环境变量。`EnvironmentVariables` 参数的值采用环境变量对象的 JSON 数组形式。请参阅[行动声明（CodeBuild 示例）](#action-reference-CodeBuild-example)中的示例参数。  
每个对象有三个均为字符串的部分：  
+ `name`：环境变量的名称或键。
+ `value`：环境变量的值。使用`PARAMETER_STORE`或`SECRETS_MANAGER`类型时，该值必须分别是您已存储在 Sy AWS stems Manager 参数存储库中的参数的名称或已存储在 Secre AWS ts Manager 中的密钥。
**注意**  
我们强烈建议使用环境变量来存储敏感值，尤其是 AWS 证书。当您使用 CodeBuild 控制台或 AWS CLI 时，环境变量以纯文本显示。对于敏感值，我们建议您改用 `SECRETS_MANAGER` 类型。
+ `type`：（可选）环境变量的类型。有效值为 `PARAMETER_STORE`、`SECRETS_MANAGER` 或 `PLAINTEXT`。如果未指定，则此值默认为 `PLAINTEXT`。
当您`type`为环境变量配置输入`name``value`、和时，尤其是在环境变量包含 CodePipeline 输出变量语法时，不要超过配置值字段的 1000 个字符的限制。如果超过此限制，将会返回验证错误。
有关更多信息，请参阅 AWS CodeBuild API 参考[ EnvironmentVariable](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_EnvironmentVariable.html)中的内容。有关使用解析为 GitHub 分支名称的环境变量的示例 CodeBuild 操作，请参阅[示例：使用带有 CodeBuild 环境 BranchName 变量的变量](actions-variables.md#actions-variables-examples-env-branchname)。

**ServiceRoleArnOverride**  
必需：否  
一个 IAM 角色 ARN， CodeBuild 它使用此操作触发的构建作为服务角色，覆盖在项目上配置的 CodeBuild 默认服务角色。如果不存在，该 CodeBuild 项目将使用其默认服务角色。  
指定的角色必须具有允许`codebuild.amazonaws.com`服务代入该角色的信任策略。用于创建或更新管道的身份和管道服务角色都必须具有指定角色的`iam:PassRole`权限。有关策略示例，请参阅 [服务角色权限： CodeBuild 操作](#edit-role-codebuild)。  
作为安全最佳实践，当一个 CodeBuild 项目跨多个管道共享时，我们建议为每个管道指定一个作用域角色，以遵循最小权限原则。对于使用 CodeConnections 源操作的管道，有关将角色的连接权限限限定[添加 CodeBuild GitClone 连接到 Bitbucket GitHub、 GitHub 企业服务器或 GitLab.com](troubleshooting.md#codebuild-role-connections)为特定存储库的示例，请参阅。  
该角色必须与 CodeBuild项目位于同一个 AWS 账户中。

## 输入构件
<a name="action-reference-CodeBuild-input"></a>
+ **构件数：**`1 to 5`
+ **描述：查** CodeBuild 找 buildspec 文件并从主源构件的目录中运行 buildspec 命令。如果指定了单个输入源，或者为操作指定了多个输入源，则必须使用中的 CodeBuild `PrimarySource`操作配置参数来设置单个对象，或者如果是多个输入源，则设置主对象 CodePipeline。

  各个输入构件会解压缩到各自的目录，其位置存储在环境变量中。主源构件的目录通过 `$CODEBUILD_SRC_DIR` 提供。所有其他输入构件的目录通过 `$CODEBUILD_SRC_DIR_yourInputArtifactName` 提供。
**注意**  
在 CodeBuild 项目中配置的构件将成为管道中 CodeBuild 操作使用的输入工件。

## 输出构件
<a name="action-reference-CodeBuild-output"></a>
+ **构件数：**`0 to 5`
+ **描述：**这些可用于使 CodeBuild buildspec 文件中定义的工件可用于管道中的后续操作。在仅定义了一个输出构件时，此构件可以直接在 buildspec 文件的 `artifacts` 部分下定义。在指定了多个输出构件时，引用的所有构件都必须在 buildspec 文件中定义为辅助构件。中的输出构件的名称 CodePipeline 必须与 buildspec 文件中的构件标识符相匹配。
**注意**  
在 CodeBuild 项目中配置的构件将成为管道操作中的 CodePipeline 输入工件。

  如果为批量构建选择了 `CombineArtifacts` 参数，则输出构件位置将包含在同一执行中运行的多个构建的合并构件。

## 输出变量
<a name="action-reference-CodeBuild-variables"></a>

此操作将生成在构建中导出的所有环境变量作为变量。有关如何导出环境变量的更多详细信息，请参阅 *AWS CodeBuild API 指南[ EnvironmentVariable](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_EnvironmentVariable.html)中的内容*。

有关在中使用 CodeBuild 环境变量的更多信息 CodePipeline，请参阅中的示例[CodeBuild 操作输出变量](reference-variables.md#reference-variables-list-configured-codebuild)。有关可以在中使用的环境变量的列表 CodeBuild，请参阅《*AWS CodeBuild 用户指南》[中的构建](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html)环境变量*。

## 服务角色权限： CodeBuild 操作
<a name="edit-role-codebuild"></a>

要获得 CodeBuild 支持，请在您的政策声明中添加以下内容：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codebuild:BatchGetBuilds",
                "codebuild:StartBuild",
                "codebuild:BatchGetBuildBatches",
                "codebuild:StartBuildBatch"
            ],
            "Resource": [
                "arn:aws:codebuild:*:{{111122223333}}:project/[[ProjectName]]"
            ],
            "Effect": "Allow"
        }
    ]
}
```

------

如果您使用`ServiceRoleArnOverride`参数，请添加以下`iam:PassRole`权限 CodePipeline 以允许将角色传递给 CodeBuild：

```
{
    "Effect": "Allow",
    "Action": "iam:PassRole",
    "Resource": "arn:aws:iam::{{111122223333}}:role/{{your-codebuild-override-role}}",
    "Condition": {
        "StringEquals": {
            "iam:PassedToService": "codebuild.amazonaws.com"
        }
    }
}
```

## 行动声明（CodeBuild 示例）
<a name="action-reference-CodeBuild-example"></a>

------
#### [ YAML ]

```
Name: Build
Actions:
  - Name: PackageExport
    ActionTypeId:
      Category: Build
      Owner: AWS
      Provider: CodeBuild
      Version: '1'
    RunOrder: 1
    Configuration:
      BatchEnabled: 'true'
      CombineArtifacts: 'true'
      ProjectName: my-build-project
      PrimarySource: MyApplicationSource1
      EnvironmentVariables: '[{"name":"TEST_VARIABLE","value":"TEST_VALUE","type":"PLAINTEXT"},{"name":"ParamStoreTest","value":"PARAMETER_NAME","type":"PARAMETER_STORE"}]'
      ServiceRoleArnOverride: 'arn:aws:iam::111122223333:role/my-scoped-codebuild-role'
    OutputArtifacts:
      - Name: MyPipeline-BuildArtifact
    InputArtifacts:
      - Name: MyApplicationSource1
      - Name: MyApplicationSource2
```

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

```
{
    "Name": "Build",
    "Actions": [
        {
            "Name": "PackageExport",
            "ActionTypeId": {
                "Category": "Build",
                "Owner": "AWS",
                "Provider": "CodeBuild",
                "Version": "1"
            },
            "RunOrder": 1,
            "Configuration": {
                "BatchEnabled": "true",
                "CombineArtifacts": "true",
                "ProjectName": "my-build-project",
                "PrimarySource": "MyApplicationSource1",
                "EnvironmentVariables": "[{\"name\":\"TEST_VARIABLE\",\"value\":\"TEST_VALUE\",\"type\":\"PLAINTEXT\"},{\"name\":\"ParamStoreTest\",\"value\":\"PARAMETER_NAME\",\"type\":\"PARAMETER_STORE\"}]",
                "ServiceRoleArnOverride": "arn:aws:iam::111122223333:role/my-scoped-codebuild-role"
            },
            "OutputArtifacts": [
                {
                    "Name": "MyPipeline-BuildArtifact"
                }
            ],
            "InputArtifacts": [
                {
                    "Name": "MyApplicationSource1"
                },
                {
                    "Name": "MyApplicationSource2"
                }
            ]
        }
    ]
}
```

------

## 另请参阅
<a name="action-reference-CodeBuild-links"></a>

下列相关资源在您使用此操作的过程中会有所帮助。
+ [AWS CodeBuild 用户指南 ](https://docs.aws.amazon.com/codebuild/latest/userguide/)-有关带有 CodeBuild 操作的管道示例，请参阅[ CodePipeline 与一起 CodeBuild 测试代码和运行构建](https://docs.aws.amazon.com/codebuild/latest/userguide/how-to-create-pipeline.html)。有关具有多个输入和输出 CodeBuild 构件的项目示例，请参阅[CodePipeline集成 CodeBuild 和多个输入源和输出构件示例](https://docs.aws.amazon.com/codebuild/latest/userguide/sample-pipeline-multi-input-output.html)和[多个输入源和输出构件示例](https://docs.aws.amazon.com/codebuild/latest/userguide/sample-multi-in-out.html)。
+ [教程：创建用于构建和测试您的 Android 应用程序的管道 AWS Device Farm](tutorials-codebuild-devicefarm.md)— 本教程提供了一个示例构建规范文件和示例应用程序，用于使用 GitHub 源代码创建管道，该管道使用和构建和测试 Android 应用程序。 CodeBuild AWS Device Farm
+ [的编译规范参考 CodeBuild ](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html) — 此参考主题为理解 CodeBuild 构建规范文件提供了定义和示例。有关可以在中使用的环境变量的列表 CodeBuild，请参阅《*AWS CodeBuild 用户指南》[中的构建](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html)环境变量*。