

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# `ECRBuildAndPublish` 組建動作參考
<a name="action-reference-ECRBuildAndPublish"></a>

此建置動作可讓您在來源發生變更時，自動建置和推送新映像。此動作會根據指定的 Docker 檔案位置建置，並推送映像。此建置動作與 CodePipeline 中的 Amazon ECR 來源動作不同，這會在 Amazon ECR 來源儲存庫發生變更時觸發管道。如需該動作的相關資訊，請參閱 [Amazon ECR 來源動作參考](action-reference-ECR.md)。

這不是會觸發管道的來源動作。此動作會建置映像，並將其推送到您的 Amazon ECR 映像儲存庫。

您必須已建立 Amazon ECR 儲存庫，並將 Dockerfile 新增至原始程式碼儲存庫，例如 GitHub，才能將動作新增至管道。

**重要**  
此動作使用 CodePipeline 受管 CodeBuild 運算在建置環境中執行命令。執行命令動作會產生個別費用 AWS CodeBuild。

**注意**  
此動作僅適用於 V2 類型管道。

**Topics**
+ [動作類型](#action-reference-ECRBuildAndPublish-type)
+ [組態參數](#action-reference-ECRBuildAndPublish-config)
+ [Input artifacts (輸入成品)](#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>

**ECRRepositoryName**  
必要：是  
推送映像的 Amazon ECR 儲存庫名稱。

**DockerFilePath**  
必要：否  
用於建置映像的 Docker 檔案位置。或者，如果不是在根層級，您可以提供備用 Docker 檔案位置。  
如果`DockerFilePath`未指定 的值，則值預設為來源儲存庫根層級。

**ImageTags**  
必要：否  
用於映像的標籤。您可以輸入多個標籤做為以逗號分隔的字串清單。  
如果未指定 `ImageTags` 的數值，則預設值為 `latest`。

**RegistryType**  
必要：否  
指定儲存庫是公有還是私有。有效值為 `private | public`。  
如果未指定 `RegistryType` 的數值，則預設值為 `private`。

## Input artifacts (輸入成品)
<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` 摘要。

**ECRRepositoryName **  
推送映像的 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 映像並將其推送至 Amazon ECR](tutorials-ecr-build-publish.md) – 本教學課程提供範例 Dockerfile 和說明，以建立管道，在來源儲存庫變更時將映像推送至 ECR，然後部署至 Amazon ECS。