

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

# 批次執行組建
<a name="batch-build"></a>

您可以使用 AWS CodeBuild 執行具有批次建置之專案的並行和協調建置。

**Topics**
+ [安全角色](#batch_security_role)
+ [批次建置類型](#batch_build_types)
+ [批次報告模式](#batch-report-mode)
+ [其他資訊](#batch_more_info)

## 安全角色
<a name="batch_security_role"></a>

批次建置在批次組態中導入新的安全性角色。此新角色是必要的，因為 CodeBuild 必須能夠代表您呼叫 `StartBuild`、`StopBuild` 和 `RetryBuild` 動作，才能在批次處理中執行組建。客戶應該使用新的角色，而不是與他們在組建中使用的角色相同，原因有兩個：
+ 賦予建置角色 `StartBuild`、`StopBuild` 和 `RetryBuild` 權限，此將允許單一組建透過 buildspec 啟動更多組建。
+ CodeBuild 批次建置提供限制，限制可用於批次中建置的建置和運算類型數目。如果組建角色具有這些權限，組建本身可能會略過這些限制。

## 批次建置類型
<a name="batch_build_types"></a>

CodeBuild 支援下列批次建置類型：

**Topics**
+ [組建圖表](#batch_build_graph)
+ [組建清單](#batch_build_list)
+ [建置矩陣](#batch_build_matrix)
+ [建置分發](#batch_build_fanout)

### 組建圖表
<a name="batch_build_graph"></a>

建置圖表會定義一組任務，這些任務對批次中的其他任務具有相依性。

下列範例會定義建立相依性鏈的建置圖表。

```
batch:
  fast-fail: false
  build-graph:
    - identifier: build1
      env:
        variables:
          BUILD_ID: build1
      ignore-failure: false
    - identifier: build2
      buildspec: build2.yml
      env:
        variables:
          BUILD_ID: build2
      depend-on:
        - build1
    - identifier: build3
      env:
        variables:
          BUILD_ID: build3
      depend-on:
        - build2
    - identifier: build4
      env:
        compute-type: ARM_LAMBDA_1GB
    - identifier: build5
      env:
        fleet: fleet_name
```

在此範例中：
+ `build1` 會先執行，因為它沒有相依性。
+ `build2` 具有 的相依性`build1`，因此 會在 `build1`完成後`build2`執行。
+ `build3` 具有 的相依性`build2`，因此 會在 `build2`完成後`build3`執行。

如需建置圖表 buildspec 語法的詳細資訊，請參閱 [`batch/build-graph`](batch-build-buildspec.md#build-spec.batch.build-graph)。

### 組建清單
<a name="batch_build_list"></a>

建置清單會定義一些平行執行的任務。

下列範例定義建置清單。`build1` 和 `build2`建置會平行執行。

```
batch:
  fast-fail: false
  build-list:
    - identifier: build1
      env:
        variables:
          BUILD_ID: build1
      ignore-failure: false
    - identifier: build2
      buildspec: build2.yml
      env:
        variables:
          BUILD_ID: build2
      ignore-failure: true
    - identifier: build3
      env:
        compute-type: ARM_LAMBDA_1GB
    - identifier: build4
      env:
        fleet: fleet_name
    - identifier: build5
      env:
        compute-type: GENERAL_LINUX_XLAGRE
```

如需建置清單 buildspec 語法的詳細資訊，請參閱 [`batch/build-list`](batch-build-buildspec.md#build-spec.batch.build-list)。

### 建置矩陣
<a name="batch_build_matrix"></a>

建置矩陣會定義具有平行執行之不同組態的任務。CodeBuild 會為每個可能的組態組合建立個別的組建。

下列範例顯示具有兩個 buildspec 檔案和三個環境變數值的建置矩陣。

```
batch:
  build-matrix:
    static:
      ignore-failure: false
    dynamic:
      buildspec: 
        - matrix1.yml
        - matrix2.yml
      env:
        variables:
          MY_VAR:
            - VALUE1
            - VALUE2
            - VALUE3
```

在此範例中，CodeBuild 會建立六個組建：
+ `matrix1.yml` 取代為 `$MY_VAR=VALUE1`
+ `matrix1.yml` 取代為 `$MY_VAR=VALUE2`
+ `matrix1.yml` 取代為 `$MY_VAR=VALUE3`
+ `matrix2.yml` 取代為 `$MY_VAR=VALUE1`
+ `matrix2.yml` 取代為 `$MY_VAR=VALUE2`
+ `matrix2.yml` 取代為 `$MY_VAR=VALUE3`

每個組建都會有下列設定：
+ `ignore-failure` 設定為 `false`
+ `env/type` 設定為 `LINUX_CONTAINER`
+ `env/image` 設定為 `aws/codebuild/amazonlinux-x86_64-standard:4.0`
+ `env/privileged-mode` 設定為 `true`

這些建置會平行執行。

如需建置矩陣 buildspec 語法的詳細資訊，請參閱 [`batch/build-matrix`](batch-build-buildspec.md#build-spec.batch.build-matrix)。

### 建置分發
<a name="batch_build_fanout"></a>

建置散發會定義任務，該任務將在批次中分割為多個建置。這可用於平行執行測試。CodeBuild 會根據 `parallelism` 欄位中設定的值，為每個測試案例碎片建立個別的組建。

下列範例會定義建置散發，以建立五個平行執行的建置。

```
version: 0.2

batch:
   fast-fail: false 
   build-fanout:
     parallelism: 5
     ignore-failure: false

phases:
  install:
    commands:
      - npm install
   build:
    commands:
      - mkdir -p test-results
      - cd test-results
      - |
        codebuild-tests-run \
         --test-command 'npx jest --runInBand --coverage' \
         --files-search "codebuild-glob-search '**/test/**/*.test.js'" \
         --sharding-strategy 'equal-distribution'
```

在此範例中，假設需要執行 100 個測試，CodeBuild 會建立五個組建，每個組建會平行執行 20 個測試。

如需建置圖表 buildspec 語法的詳細資訊，請參閱 [`batch/build-fanout`](batch-build-buildspec.md#build-spec.batch.build-fanout)。

## 批次報告模式
<a name="batch-report-mode"></a>

如果專案的來源提供者是 Bitbucket、GitHub 或 GitHub Enterprise，且您的專案已設定為向來源提供者報告建置狀態，您可以選取要將批次建置狀態傳送至來源提供者的方式。您可以選擇讓狀態作為批次的單一彙總狀態報告傳送，或讓批次中每個組建的狀態個別報告。

如需詳細資訊，請參閱下列主題：
+ [批次組態 （建立）](create-project.md#create-project-console-batch-config)
+ [批次組態 （更新）](change-project.md#change-project-console-batch-config)

## 其他資訊
<a name="batch_more_info"></a>

如需詳細資訊，請參閱下列主題：
+ [批次建置 buildspec 參考](batch-build-buildspec.md)
+ [批次組態](create-project.md#create-project-console-batch-config)
+ [執行批次建置 (AWS CLI)](run-batch-build-cli.md)
+ [在 中停止批次建置 AWS CodeBuild](stop-batch-build.md)