

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

# 输入和输出构件
<a name="welcome-introducing-artifacts"></a>

CodePipeline 与开发工具集成以检查代码更改，然后在持续交付过程的所有阶段进行构建和部署。构件是指通过管道中的操作处理的文件，例如包含应用程序代码的文件或文件夹、索引页文件、脚本等。例如，Amazon S3 源操作构件是为管道源操作提供应用程序源代码文件的文件名（或文件路径）。这些文件以 ZIP 文件形式提供，例如以下示例构件名称：`SampleApp_Windows.zip`。源操作的输出构件，即应用程序源代码文件，是源操作的输出构件，也是下一操作（例如构建操作）的输入构件。又例如，构建操作可能会运行构建命令以编译输入构件（应用程序源代码文件）的应用程序源代码。有关构件参数（例如操作）的详细信息，请参阅特定操作[Amazon CodeBuild 生成和测试操作参考](action-reference-CodeBuild.md)的 CodeBuild 操作配置参考页面。

操作使用存储在您在创建管道时选择的 Amazon S3 项目存储桶中的输入和输出项目。 CodePipeline 根据舞台中的操作类型，压缩和传输输入或输出工件的文件。

**注意**  
构件桶与用作管道源文件位置的桶不同，其中所选源操作为 S3。

例如：

1. CodePipeline 在提交源存储库时触发管道运行，提供**源**阶段的输出构件（任何要构建的文件）。

1. 上一步骤中的输出构件（要构建的任意文件）将作为**构建**阶段的输入构件。**构建**阶段的输出构件（构建应用程序）可能是为容器构建的更新的应用程序或更新的 Docker 镜像。

1. 上一步骤中的输出构件（构建应用程序）将作为**部署**阶段的输入构件，例如， Amazon Web Services 云中的暂存或生产环境。您可以将应用程序部署到部署队列中，也可以将基于容器的应用程序部署到在 ECS 集群中运行的任务。

创建或编辑操作时，您可以为操作指定输入和输出构件。例如，对于具有**源**和**部署**阶段的两阶段管道，在**编辑操作**中，您可以为部署操作的输入构件选择源操作的构件名称。
+ 当您使用控制台创建第一个管道时， CodePipeline 会在同一个管道中创建一个 Amazon S3 存储桶 Amazon Web Services 区域 ， Amazon Web Services 账户 并存储所有管道的项目。每次使用控制台在该区域创建另一个管道时，都会在存储桶中为该管道 CodePipeline 创建一个文件夹。在自动化发布过程运行时，它将使用该文件夹来存储管道的项目。此存储桶名为 codepipeline-*region*-*12345EXAMPLE*，其中*region*是您创建管道的 Amazon 区域，*12345EXAMPLE*是一个 12 位随机数，可确保存储桶名称是唯一的。
**注意**  
如果您在创建管道的*区域*中已经有一个以 codepipeline-region 开头的存储桶， CodePipeline 请将其用作默认存储桶。它还遵循字母表顺序；例如 codepipeline-*region-abcexample* 先于 codepipeline-*region-defexample* 选择。

  CodePipeline 截断对象名称，这可能会导致某些存储桶名称看起来相似。尽管工件名称似乎已被截断，但 CodePipeline 映射到工件存储桶的方式不会受到名称被截断的工件的影响。管道可以正常工作。这不是文件夹或构件的问题。管道名称不能超过 100 个字符。尽管构件文件夹名称似乎已缩短，但它对您的管道来说仍然是唯一的。

  创建或编辑管道时，管道中必须有一个工件存储桶 Amazon Web Services 区域， Amazon Web Services 账户 并且您计划在其中执行操作的每个区域都必须有一个构件存储桶。如果使用控制台创建管道或跨区域操作， CodePipeline 会在您有操作的区域中配置默认构件存储桶。

  如果您使用创建管道，则可以 Amazon CLI 将该管道的项目存储在任何 Amazon S3 存储桶中，前提是该存储桶与管道位于相同 Amazon Web Services 账户 且 Amazon Web Services 区域 与管道相同。如果您担心超出您的账户允许的 Amazon S3 桶限制，则可以这么做。如果您使用创建或编辑管道，并且添加了跨区域操作（ Amazon 提供商位于与您的管道不同的区域的操作），则必须为计划执行操作的每个其他区域提供一个构件存储桶。 Amazon CLI 
+ 每个操作都有一个类型。根据类型，操作可能具有以下一项或两项：
  + 输入项目，它是操作在运行过程中使用或处理的项目。
  + 输出构件，它是操作的输出。

  管道中的每个输出构件必须具有唯一的名称。操作的每个输入项目必须与管道中的以前操作的输出构件匹配，无论该操作直接位于某个阶段中的操作前面，还是相差几个阶段。

  项目可以由多个操作处理。