

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

# 多個輸入來源和輸出成品範例
<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
```

 您可以使用 API 搭配 `StartBuild` 中的 `sourceVersion` 屬性，以覆寫主要來源的版本。若要覆寫一個或多個次要來源版本，請使用 `secondarySourceVersionOverride` 屬性。

 中`start-build`命令的 JSON 格式輸入 AWS CLI 可能如下所示：

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

# 建立不含來源的建置專案
<a name="no-source"></a>

 您可以在設定**NO\$1SOURCE**來源時選擇來源類型來設定 CodeBuild 專案。當來源類型為 **NO\$1SOURCE** 時，您將無法指定 buildspec 檔案，因為專案並無任何來源。相反地，您必須在 `create-project` CLI 命令的 JSON 格式輸入的 `buildspec` 屬性中指定 YAML 格式 buildspec 字串。這看起來類似下述：

```
{
  "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)。