

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

# `ECRBuildAndPublish` 构建操作参考
<a name="action-reference-ECRBuildAndPublish"></a>

此构建操作允许您在源发生更改时自动构建和推送新映像。此操作基于指定的 Docker 文件位置构建并推送映像。此构建操作与中的 Amazon ECR 源操作不同 CodePipeline，后者会在您的 Amazon ECR 源存储库发生更改时触发管道。有关该操作的信息，请参阅[Amazon ECR 源操作参考](action-reference-ECR.md)。

这不是会触发管道的源操作。此操作会构建映像并将其推送到您的 Amazon ECR 映像存储库。

在将操作添加到管道之前，您必须已经创建了 Amazon ECR 存储库并已将 Dockerfile 添加到源代码存储库中 GitHub，例如。

**重要**  
此操作使用 CodePipeline 托管 CodeBuild 计算在构建环境中运行命令。运行 Commands 操作将在 AWS CodeBuild中产生单独的费用。

**注意**  
此操作仅适用于 V2 类型管道。

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

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

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

**ECRRepository名称**  
是否必需：是  
向其中推送映像的 Amazon ECR 存储库的名称。

**DockerFilePath**  
必需：否  
用于构建镜像的 Docker 文件的位置。如果该文件位置不在根级别，您可以选择提供备用 Docker 文件位置。  
如果未指定 `DockerFilePath` 的值，则该值默认为源存储库根级别。

**ImageTags**  
必需：否  
为映像使用的标签。您可以逗号分隔的字符串列表形式输入多个标签。  
如果未指定 `ImageTags` 的值，则该值默认为 `latest`。

**RegistryType**  
必需：否  
指定存储库是公共还是私有。有效值为 `private | public`。  
如果未指定 `RegistryType` 的值，则该值默认为 `private`。

## 输入构件
<a name="action-reference-ECRBuildAndPublish-input"></a>
+ **构件数：**`1`
+ **描述：**源操作生成的构件，其中包含构建映像所需的 Dockerfile。

## 输出构件
<a name="action-reference-ECRBuildAndPublish-output"></a>
+ **构件数：**`0`

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

配置后，此操作会生成变量，该变量可由管道中下游操作的操作配置引用。此操作生成的变量可视为输出变量，即使操作没有命名空间也是如此。您可以使用命名空间配置操作，以使这些变量可用于下游操作的配置。

有关更多信息，请参阅 [变量参考](reference-variables.md)。

**ECRImageDigestId **  
映像清单的 `sha256` 摘要。

**ECRRepository名称 **  
向其中推送映像的 Amazon ECR 存储库的名称。

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

如需 `ECRBuildAndPublish` 操作支持，请将以下内容添加到策略语句中：

```
{
    "Statement": [
         {
            "Sid": "ECRRepositoryAllResourcePolicy",
            "Effect": "Allow",
            "Action": [
                "ecr:DescribeRepositories",
                "ecr:GetAuthorizationToken",
                "ecr-public:DescribeRepositories",
                "ecr-public:GetAuthorizationToken"
            ],
        "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload",
                "ecr:PutImage",
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchCheckLayerAvailability"
            ],
            "Resource": "PrivateECR_Resource_ARN"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecr-public:GetAuthorizationToken",
                "ecr-public:DescribeRepositories",
                "ecr-public:InitiateLayerUpload",
                "ecr-public:UploadLayerPart",
                "ecr-public:CompleteLayerUpload",
                "ecr-public:PutImage",
                "ecr-public:BatchCheckLayerAvailability",
                "sts:GetServiceBearerToken"
            ],
            "Resource": "PublicECR_Resource_ARN"
        },
        {
            "Effect": "Allow",
            "Action": [
                "sts:GetServiceBearerToken"
            ],
            "Resource": "*"
        }
    ]
}
```

此外，如果尚未为`Commands`操作添加以下权限，请向您的服务角色添加以下权限以查看 CloudWatch 日志。

```
{
    "Effect": "Allow",
    "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream", 
        "logs:PutLogEvents"
    ],
    "Resource": "resource_ARN"
},
```

**注意**  
在服务角色策略声明中使用基于资源的权限，将权限范围缩小到管道资源级别。

有关此操作的更多信息，请参阅[`ECRBuildAndPublish` 构建操作参考](#action-reference-ECRBuildAndPublish)。

## 操作声明
<a name="action-reference-ECRBuildAndPublish-example"></a>

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

```
name: ECRBuild
actionTypeId:
  category: Build
  owner: AWS
  provider: ECRBuildAndPublish
  version: '1'
runOrder: 1
configuration:
  ECRRepositoryName: actions/my-imagerepo
outputArtifacts: []
inputArtifacts:
- name: SourceArtifact
region: us-east-1
namespace: BuildVariables
```

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

```
{
    "name": "ECRBuild",
    "actionTypeId": {
        "category": "Build",
        "owner": "AWS",
        "provider": "ECRBuildAndPublish",
        "version": "1"
    },
    "runOrder": 1,
    "configuration": {
        "ECRRepositoryName": "actions/my-imagerepo"
    },
    "outputArtifacts": [],
    "inputArtifacts": [
        {
            "name": "SourceArtifact"
        }
    ],
    "region": "us-east-1",
    "namespace": "BuildVariables"
},
```

------

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

下列相关资源在您使用此操作的过程中会有所帮助。
+ [教程：使用 CodePipeline （V2 类型）构建 Docker 镜像并将其推送到亚马逊 ECR](tutorials-ecr-build-publish.md)：本教程提供了示例 Dockerfile 和创建管道的说明，该管道用于在源存储库发生更改时将您的映像推送到 ECR，然后部署到 Amazon ECS。