

亚马逊 CodeCatalyst 不再向新买家开放。现有客户可以继续正常使用该服务。有关更多信息，请参阅 [如何从中迁移 CodeCatalyst](migration.md)。

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

# 在操作之间共享构件和文件
<a name="workflows-working-artifacts"></a>

*构件*是工作流操作的输出，通常由文件夹或文件存档组成。构件之所以重要，是因为它们让您可以在操作之间共享文件和信息。

例如，您可能有一个构建操作*生成*了 `sam-template.yml` 文件，但您希望部署操作*使用*该文件。在这种情况下，您将使用构件来允许构建操作与部署操作共享 `sam-template.yml` 文件。代码类似于如下所示：

```
Actions:
  BuildAction:
    Identifier: aws/build@v1
    Steps:
      - Run: sam package --output-template-file sam-template.yml
    Outputs:
      Artifacts:
        - Name: MYARTIFACT
          Files:
            - sam-template.yml
  DeployAction:
    Identifier: aws/cfn-deploy@v1  
    Inputs:
      Artifacts:
        - MYARTIFACT
    Configuration:
      template: sam-template.yml
```

在前面的代码中，构建操作（`BuildAction`）生成一个 `sam-template.yml` 文件，然后将其添加到名为 `MYARTIFACT` 的输出构件中。随后的部署操作（`DeployAction`）指定 `MYARTIFACT` 作为输入，向其提供了对 `sam-template.yml` 文件的访问权限。

**Topics**
+ [我能否在不将构件指定为输出和输入的情况下共享它们？](#workflows-working-artifacts-share)
+ [我能否在工作流之间共享构件？](#workflows-working-artifacts-share-wf)
+ [构件示例](workflows-working-artifacts-ex.md)
+ [定义输出构件](workflows-working-artifacts-output.md)
+ [定义输入构件](workflows-working-artifacts-refer.md)
+ [在构件中引用文件](workflows-working-artifacts-refer-files.md)
+ [下载构件](workflows-download-workflow-outputs.md)

## 我能否在不将构件指定为输出和输入的情况下共享它们？
<a name="workflows-working-artifacts-share"></a>

可以，您可以在操作之间共享构件，而无需在操作的 YAML 代码的 `Outputs` 和 `Inputs` 部分中指定构件。为此，您必须启用计算共享。有关计算共享以及如何在启用计算共享时指定构件的更多信息，请参阅[跨操作共享计算](compute-sharing.md)。

**注意**  
尽管计算共享功能通过消除对 `Outputs` 和 `Inputs` 部分的需求来简化工作流的 YAML 代码，但该功能存在一些局限性，您应在启用该功能之前了解这些局限性。有关这些限制的信息，请参阅[计算共享注意事项](compute-sharing.md#compare-compute-sharing)。

## 我能否在工作流之间共享构件？
<a name="workflows-working-artifacts-share-wf"></a>

不可以，您不能在不同的工作流之间共享构件；但是，您可以在同一工作流中的操作之间共享构件。

# 构件示例
<a name="workflows-working-artifacts-ex"></a>

以下示例说明如何输出、输入和引用 Amazon CodeCatalyst 工作流程定义文件中的项目。

**Topics**
+ [示例：输出构件](#workflows-working-artifacts-ex-basic)
+ [示例：输入由其他操作生成的构件](#workflows-working-artifacts-ex-ref)
+ [示例：引用多个构件中的文件](#workflows-working-artifacts-ex-ref-file)
+ [示例：在单个构件中引用文件](#workflows-working-artifacts-ex-ref-file-one)
+ [示例：存在对象时引用对象中的文件 WorkflowSource](#workflows-working-artifacts-ex-ref-file-wf-source)
+ [示例：存在操作组时引用构件中的文件](#workflows-working-artifacts-ex-groups)

## 示例：输出构件
<a name="workflows-working-artifacts-ex-basic"></a>

以下示例演示如何输出包含两个 .jar 文件的构件。

```
Actions:
  Build:
    Identifier: aws/build@v1
    Outputs:
      Artifacts:
        - Name: ARTIFACT1
          Files:
            - build-output/file1.jar
            - build-output/file2.jar
```

## 示例：输入由其他操作生成的构件
<a name="workflows-working-artifacts-ex-ref"></a>

以下示例向您展示了如何在 `BuildActionA` 中输出名为 `ARTIFACT4` 的构件并将其输入到 `BuildActionB`。

```
Actions:
  BuildActionA:
    Identifier: aws/build@v1  
    Outputs:
      Artifacts:
        - Name: ARTIFACT4
          Files:
            - build-output/file1.jar
            - build-output/file2.jar
  BuildActionB:
    Identifier: aws/build@v1  
    Inputs:
      Artifacts:
        - ARTIFACT4
    Configuration:
```

## 示例：引用多个构件中的文件
<a name="workflows-working-artifacts-ex-ref-file"></a>

以下示例向您展示了如何在 `BuildActionC` 中输出名为 `ART5` 和 `ART6` 的两个构件，然后在 `BuildActionD` 中（位于 `Steps` 下）引用名为 `file5.txt`（在构件 `ART5` 中）和 `file6.txt`（在构件 `ART6` 中）的两个文件。

**注意**  
有关引用文件的更多信息，请参阅[在构件中引用文件](workflows-working-artifacts-refer-files.md)。

**注意**  
尽管该示例显示使用了 `$CATALYST_SOURCE_DIR_ART5` 前缀，但您可以省略它。这是因为 `ART5` 是*主输入*。要了解有关主输入的更多信息，请参阅[在构件中引用文件](workflows-working-artifacts-refer-files.md)。

```
Actions:
  BuildActionC:
    Identifier: aws/build@v1  
    Outputs:
      Artifacts:
        - Name: ART5
          Files:
            - build-output/file5.txt
        - Name: ART6
          Files:
            - build-output/file6.txt
  BuildActionD:
    Identifier: aws/build@v1  
    Inputs:
      Artifacts:
        - ART5
        - ART6
    Configuration:
      Steps:
        - run: cd $CATALYST_SOURCE_DIR_ART5/build-output && cat file5.txt
        - run: cd $CATALYST_SOURCE_DIR_ART6/build-output && cat file6.txt
```

## 示例：在单个构件中引用文件
<a name="workflows-working-artifacts-ex-ref-file-one"></a>

以下示例向您展示了如何在 `BuildActionE` 中输出名为 `ART7` 的构件，然后在 `BuildActionF` 中（位于 `Steps` 下）引用 `file7.txt`（在构件 `ART7` 中）文件。

请注意，引用并不像在`build-output`目录前面那样需要前`$CATALYST_SOURCE_DIR_`*artifact-name*缀[示例：引用多个构件中的文件](#workflows-working-artifacts-ex-ref-file)。这是因为 `Inputs` 下仅指定了一项。

**注意**  
有关引用文件的更多信息，请参阅[在构件中引用文件](workflows-working-artifacts-refer-files.md)。

```
Actions:
  BuildActionE:
    Identifier: aws/build@v1  
    Outputs:
      Artifacts:
        - Name: ART7
          Files:
            - build-output/file7.txt
  BuildActionF:
    Identifier: aws/build@v1  
    Inputs:
      Artifacts:
        - ART7
    Configuration:
      Steps:
        - run: cd build-output && cat file7.txt
```

## 示例：存在对象时引用对象中的文件 WorkflowSource
<a name="workflows-working-artifacts-ex-ref-file-wf-source"></a>

以下示例向您展示了如何在 `BuildActionG` 中输出名为 `ART8` 的构件，然后在 `BuildActionH` 中（位于 `Steps` 下）引用 `file8.txt`（在构件 `ART8` 中）文件。

请注意引用是如何需要`$CATALYST_SOURCE_DIR_`*artifact-name*前缀的，就像在中一样[示例：引用多个构件中的文件](#workflows-working-artifacts-ex-ref-file)。这是因为 `Inputs` 下指定了多项（一个源和一个构件），所以您需要使用前缀来指示在哪里查找文件。

**注意**  
有关引用文件的更多信息，请参阅[在构件中引用文件](workflows-working-artifacts-refer-files.md)。

```
Actions:
  BuildActionG:
    Identifier: aws/build@v1  
    Outputs:
      Artifacts:
        - Name: ART8
          Files:
            - build-output/file8.txt
  BuildActionH:
    Identifier: aws/build@v1  
    Inputs:
      Sources:
        - WorkflowSource
      Artifacts:
        - ART8
    Configuration:
      Steps:
        - run: cd $CATALYST_SOURCE_DIR_ART8/build-output && cat file8.txt
```

## 示例：存在操作组时引用构件中的文件
<a name="workflows-working-artifacts-ex-groups"></a>

以下示例向您展示了如何在 `ActionGroup1`、`ActionI` 中输出名为 `ART9` 的构件，然后在 `ActionJ` 中引用 `file9.txt`（在构件 `ART9` 中）。

有关引用文件的更多信息，请参阅[在构件中引用文件](workflows-working-artifacts-refer-files.md)。

```
Actions:
  ActionGroup1:
    Actions:
      ActionI:
        Identifier: aws/build@v1
        Outputs:
          Artifacts:
            - Name: ART9
              Files:
                - build-output/file9.yml
      ActionJ:
        Identifier: aws/cfn-deploy@v1 
        Inputs:
          Sources:
            - WorkflowSource
          Artifacts:
            - ART9
        Configuration:
          template: /artifacts/ActionGroup1@ActionJ/ART9/build-output/file9.yml
```

# 定义输出构件
<a name="workflows-working-artifacts-output"></a>

按照以下说明定义您希望 Amazon CodeCatalyst 操作输出的对象。该构件随后可供其他操作使用。

**注意**  
并非所有操作都支持输出构件。要确定您的操作是否支持输出构件，请仔细阅读随后的可视化编辑器说明，并查看操作的**输出**选项卡上是否包含**输出构件**按钮。如果是，则支持输出构件。

------
#### [ Visual ]

**使用可视化编辑器定义输出构件**

1. 打开 CodeCatalyst 控制台，[网址为 https://codecatalyst.aws/](https://codecatalyst.aws/)。

1. 选择您的项目。

1. 在导航窗格中，选择 **CI/CD**，然后选择**工作流**。

1. 选择工作流的名称。您可以按定义工作流的源存储库或分支名称筛选，也可以按工作流名称或状态筛选。

1. 选择**编辑**。

1. 选择**可视化**。

1. 在工作流图表中，选择将生成构件的操作。

1. 选择**输出**选项卡。

1. 在**构件**下，选择**添加构件**。

1. 选择**添加构件**，然后在字段中输入信息，如下所示。

    **生成构件名称** 

   指定操作生成的构件的名称。构件名称在工作流内必须是唯一的，并且仅限于字母数字字符（a-z、A-Z、0-9）和下划线（\$1）。不允许使用空格、连字符（-）和特殊字符。不能使用引号以使输出构件名称包含空格、连字符和其他特殊字符。

   有关构件的更多信息（包括示例），请参阅[在操作之间共享构件和文件](workflows-working-artifacts.md)。

    **通过构建生成的文件** 

   指定操作输出的对象中 CodeCatalyst 包含的文件。这些文件由工作流操作在运行时生成，也可在您的源存储库中找到。文件路径可以位于源存储库或先前操作的构件中，并且相对于源存储库或构件根目录。您可以使用 glob 模式来指定路径。示例：
   + 要指定位于构建位置或源存储库位置根目录中的单个文件，请使用 `my-file.jar`。
   + 要在子目录中指定单个文件，请使用 `directory/my-file.jar` 或 `directory/subdirectory/my-file.jar`。
   + 要指定所有文件，请使用 `"**/*"`。`**` glob 模式表示匹配任意数量的子目录。
   + 要指定名为 `directory` 的目录中的所有文件和目录，请使用 `"directory/**/*"`。`**` glob 模式表示匹配任意数量的子目录。
   + 要指定名为 `directory` 的目录中的所有文件，而非其任意子目录，请使用 `"directory/*"`。
**注意**  
如果您的文件路径包含一个或多个星号（`*`）或其他特殊字符，请用双引号（`""`）将路径括起来。有关特殊字符的更多信息，请参阅[语法准则和惯例](workflow-reference.md#workflow.terms.syntax.conv)。

   有关构件的更多信息（包括示例），请参阅[在操作之间共享构件和文件](workflows-working-artifacts.md)。
**注意**  
您可能需要在文件路径中添加前缀，以指明要在哪个构件或源中查找它。有关更多信息，请参阅[引用源存储库文件](workflows-sources-reference-files.md)和[在构件中引用文件](workflows-working-artifacts-refer-files.md)。

1. （可选）选择**验证**，在提交之前验证工作流的 YAML 代码。

1. 选择**提交**，输入提交消息，然后再次选择**提交**。

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

**使用 YAML 编辑器定义输出构件**

1. 打开 CodeCatalyst 控制台，[网址为 https://codecatalyst.aws/](https://codecatalyst.aws/)。

1. 选择您的项目。

1. 在导航窗格中，选择 **CI/CD**，然后选择**工作流**。

1. 选择工作流的名称。您可以按定义工作流的源存储库或分支名称筛选，也可以按工作流名称或状态筛选。

1. 选择**编辑**。

1. 选择 **YAML**。

1. 在工作流操作中，添加类似于下文的代码：

   ```
   action-name:
     Outputs:
       Artifacts:
         - Name: artifact-name
           Files:
             - file-path-1
             - file-path-2
   ```

   有关更多示例，请参阅[构件示例](workflows-working-artifacts-ex.md)。有关更多信息，请参阅相应操作的[工作流 YAML 定义](workflow-reference.md)。

1. （可选）选择**验证**，在提交之前验证工作流的 YAML 代码。

1. 选择**提交**，输入提交消息，然后再次选择**提交**。

------

# 定义输入构件
<a name="workflows-working-artifacts-refer"></a>

如果您想使用由其他 Amazon CodeCatalyst 操作生成的项目，则必须将其指定为当前操作的输入。您可以指定多个构件作为输入，具体取决于相应操作。有关更多信息，请参阅相应操作的[工作流 YAML 定义](workflow-reference.md)。

**注意**  
您不能引用其他工作流中的构件。

按照以下说明，将来自另一个操作的构件指定为当前操作的输入。

**先决条件**  
在开始之前，请确保您已从其他操作输出了构件。有关更多信息，请参阅[定义输出构件](workflows-working-artifacts-output.md)。输出构件，以使其可供其他操作使用。

------
#### [ Visual ]

**将构件指定为操作的输入（可视化编辑器）**

1. 打开 CodeCatalyst 控制台，[网址为 https://codecatalyst.aws/](https://codecatalyst.aws/)。

1. 选择您的项目。

1. 在导航窗格中，选择 **CI/CD**，然后选择**工作流**。

1. 选择工作流的名称。您可以按定义工作流的源存储库或分支名称筛选，也可以按工作流名称或状态筛选。

1. 选择**编辑**。

1. 选择**可视化**。

1. 在工作流图表中，选择要将构件指定为输入的操作。

1. 选择**输入**。

1. 在**构件 – 可选**中，执行以下操作：

   指定以前操作中的一些构件，您希望将这些构件用作此操作的输入。这些构件必须已在以前的操作中定义为输出构件。

   如果未指定任何输入构件，则必须在 `action-name/Inputs/Sources` 下指定至少一个源存储库。

   有关构件的更多信息（包括示例），请参阅[在操作之间共享构件和文件](workflows-working-artifacts.md)。
**注意**  
如果**构件 – 可选**下拉列表不可用（可视化编辑器），或者在验证 YAML 时出现错误（YAML 编辑器），这可能是因该操作仅支持一个输入导致的。在这种情况下，请尝试移除源输入。

1. （可选）选择**验证**，在提交之前验证工作流的 YAML 代码。

1. 选择**提交**，输入提交消息，然后再次选择**提交**。

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

**将构件指定为操作的输入（YAML 编辑器）**

1. 打开 CodeCatalyst 控制台，[网址为 https://codecatalyst.aws/](https://codecatalyst.aws/)。

1. 选择您的项目。

1. 在导航窗格中，选择 **CI/CD**，然后选择**工作流**。

1. 选择工作流的名称。您可以按定义工作流的源存储库或分支名称筛选，也可以按工作流名称或状态筛选。

1. 选择**编辑**。

1. 选择 **YAML**。

1. 在要将构件指定作为输入的操作中，添加类似于以下内容的代码：

   ```
   action-name:
     Inputs:
       Artifacts:
         - artifact-name
   ```

   有关更多示例，请参阅[构件示例](workflows-working-artifacts-ex.md)。

1. （可选）选择**验证**，在提交之前验证工作流的 YAML 代码。

1. 选择**提交**，输入提交消息，然后再次选择**提交**。

------

# 在构件中引用文件
<a name="workflows-working-artifacts-refer-files"></a>

如果您的文件位于项目中，并且需要在某个 Amazon CodeCatalyst 工作流程操作中引用此文件，请完成以下步骤。

**注意**  
另请参阅[引用源存储库文件](workflows-sources-reference-files.md)。

------
#### [ Visual ]

*不可用。选择 YAML 以查看 YAML 说明。*

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

**引用构件中的文件（YAML 编辑器）**

1. 打开 CodeCatalyst 控制台，[网址为 https://codecatalyst.aws/](https://codecatalyst.aws/)。

1. 选择您的项目。

1. 在导航窗格中，选择 **CI/CD**，然后选择**工作流**。

1. 选择工作流的名称。您可以按定义工作流的源存储库或分支名称筛选，也可以按工作流名称或状态筛选。

1. 选择**编辑**。

1. 选择 **YAML**。

1. 在要引用文件的操作中，添加类似于以下内容的代码：

   ```
   Actions:
     My-action:
       Inputs:
         Sources:
           - WorkflowSource
         Artifacts:
           - artifact-name  
       Configuration:
         template: artifact-path/path/to/file.yml
   ```

   在前面的代码中，将：
   + *artifact-name*用神器的名字。
   + *artifact-path*其值来自下表。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/codecatalyst/latest/userguide/workflows-working-artifacts-refer-files.html)

   有关示例，请参阅 [构件示例](workflows-working-artifacts-ex.md)。
**注意**  
在以下情况下，你可以省略*artifact-path*，只指定相对于工件根目录的文件路径：  
包含引用的操作仅包含 `Inputs` 下的一项（例如，它包含一个输入构件而不包含任何源）。
您要引用的文件位于主输入中。*主输入*要么是 `WorkflowSource`，要么是列出的第一个输入构件（如果没有 `WorkflowSource`）。

1. （可选）选择**验证**，在提交之前验证工作流的 YAML 代码。

1. 选择**提交**，输入提交消息，然后再次选择**提交**。

------

# 下载构件
<a name="workflows-download-workflow-outputs"></a>

您可以下载由您的 Amazon CodeCatalyst 工作流操作生成的构件，并进行检查以排除故障。您可以下载两种类型的构件：
+ **源构件** – 包含运行开始时存在的源存储库内容的快照的构件。
+ **工作流构件** – 在工作流配置文件的 `Outputs` 属性中定义的构件。

**下载工作流输出的构件**

1. 通过访问 [https://codecatalyst.aws/](https://codecatalyst.aws/) 打开 CodeCatalyst 控制台。

1. 选择您的项目。

1. 在导航窗格中，选择 **CI/CD**，然后选择**工作流**。

1. 选择工作流的名称。您可以按定义工作流的源存储库或分支名称筛选，也可以按工作流名称或状态筛选。

1. 在工作流的名称下，选择**运行**。

1. 在**运行历史记录**的**运行 ID** 列中，选择一个运行。例如 `Run-95a4d`。

1. 在运行的名称下，选择**构件**。

1. 在构件旁边，选择**下载**。此时会下载存档文件。其文件名由七个随机字符组成。

1. 使用您选择的档案提取实用程序来提取存档。