使用构件在工作流程中的操作之间共享数据 - Amazon CodeCatalyst

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

使用构件在工作流程中的操作之间共享数据

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

例如,您可能有一个生成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文件。

我能否在不将工件指定为输出和输入的情况下共享它们?

是的,您可以在操作之间共享工件,而无需在操作的 YAML Inputs 代码的Outputs和部分中指定它们。为此,必须开启计算共享。有关计算共享以及如何在开启计算共享时指定构件的更多信息,请参阅跨操作共享计算

注意

尽管计算共享功能允许您通过消除对OutputsInputs部分的需求来简化工作流程的 YAML 代码,但该功能存在一些局限性,在开启之前您应该注意这些局限性。有关这些限制的信息,请参阅计算共享的注意事项

我能否在工作流程之间共享工件?

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

定义输出对象

按照以下说明定义要输出操作的对象。然后,该构件可供其他操作使用。

注意

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

Visual
使用可视化编辑器定义输出构件
  1. 打开 CodeCatalyst 控制台,网址为 https://codecatalyst.aws/

  2. 选择您的项目。

  3. 在导航窗格中,选择 C I/CD,然后选择工作流程。

  4. 选择工作流程的名称。您可以按定义工作流程的源存储库或分支名称进行筛选,也可以按工作流程名称进行筛选。

  5. 选择编辑

  6. 选择 “视觉”。

  7. 在工作流程图中,选择将生成构件的操作。

  8. 选择输出选项卡。

  9. 在 “构件” 下,选择 “添加构件”。

  10. 选择 “添加对象”,然后在字段中输入信息,如下所示。

    构建构件名称

    指定操作生成的对象的名称。Artifact 名称在工作流程中必须是唯一的,并且仅限于字母数字字符(a-z、A-Z、0-9)和下划线 (_)。不允许使用空格、连字符 (-) 和其他特殊字符。不能使用引号在输出对象名称中启用空格、连字符和其他特殊字符。

    有关构件的更多信息(包括示例),请参阅使用构件在工作流程中的操作之间共享数据

    由 build 生成的文件

    指定操作输出的对象中 CodeCatalyst 包含的文件。这些文件由工作流程操作在运行时生成,也可在源存储库中找到。文件路径可以位于源存储库或先前操作中的对象中,并且是相对于源存储库或项目根目录的。你可以使用 glob 模式来指定路径。示例:

    • 要指定位于构建位置或源存储库位置根目录中的单个文件,请使用 my-file.jar

    • 要在子目录中指定单个文件,请使用 directory/my-file.jardirectory/subdirectory/my-file.jar

    • 要指定所有文件,请使用 "**/*"** glob 模式表示匹配任意数量的子目录。

    • 要指定名为 directory 的目录中的所有文件和目录,请使用 "directory/**/*"** glob 模式表示匹配任意数量的子目录。

    • 要指定名为 directory 的目录中的所有文件,而非其任意子目录,请使用 "directory/*"

    注意

    如果您的文件路径包含一个或多个星号 (*) 或其他特殊字符,请用双引号 () 将路径括起来。""有关特殊字符的更多信息,请参见语法指南和惯例

    有关构件的更多信息(包括示例),请参阅使用构件在工作流程中的操作之间共享数据

    注意

    您可能需要在文件路径中添加前缀,以指明要在哪个工件或来源中找到它。有关更多信息,请参阅 引用源存储库中的文件在构件中引用文件

  11. (可选)选择 “验证” 以在提交之前验证工作流程的 YAML 代码。

  12. 选择 “提交”,输入提交消息,然后再次选择 “提交”。

YAML
使用 YAML 编辑器定义输出构件
  1. 打开 CodeCatalyst 控制台,网址为 https://codecatalyst.aws/

  2. 选择您的项目。

  3. 在导航窗格中,选择 C I/CD,然后选择工作流程。

  4. 选择工作流程的名称。您可以按定义工作流程的源存储库或分支名称进行筛选,也可以按工作流程名称进行筛选。

  5. 选择编辑

  6. 选择 YAML。

  7. 在工作流程操作中,添加类似于以下内容的代码:

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

    有关更多示例,请参阅文物示例。有关更多信息,工作流程 YAML 定义请参阅您的操作。

  8. (可选)选择 “验证” 以在提交之前验证工作流程的 YAML 代码。

  9. 选择 “提交”,输入提交消息,然后再次选择 “提交”。

定义输入工件

如果要使用其他操作生成的对象,则必须将其指定为当前操作的输入。您可以将多个构件指定为输入,具体取决于操作。有关更多信息,工作流程 YAML 定义请参阅您的操作。

注意

您不能引用其他工作流程中的构件。

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

先决条件

在开始之前,请确保已输出其他操作的构件。有关更多信息,请参阅 定义输出对象。输出构件使其可供其他操作使用。

Visual
将构件指定为操作的输入(可视化编辑器)
  1. 打开 CodeCatalyst 控制台,网址为 https://codecatalyst.aws/

  2. 选择您的项目。

  3. 在导航窗格中,选择 C I/CD,然后选择工作流程。

  4. 选择工作流程的名称。您可以按定义工作流程的源存储库或分支名称进行筛选,也可以按工作流程名称进行筛选。

  5. 选择编辑

  6. 选择 “视觉”。

  7. 在工作流程图中,选择要将对象指定为输入的操作。

  8. 选择输入

  9. 在 “构件-可选” 中,执行以下操作:

    指定要作为此操作输入的先前操作中的对象。在之前的操作中,这些构件必须已定义为输出对象。

    如果您未指定任何输入对象,则必须至少在下方指定一个源存储库action-name/Inputs/Sources

    有关构件的更多信息(包括示例),请参阅使用构件在工作流程中的操作之间共享数据

    注意

    如果 Artifacts -可选下拉列表不可用(可视化编辑器),或者在验证 YAML(YAML 编辑器)时出现错误,则可能是因为该操作仅支持一个输入。在这种情况下,请尝试移除源输入。

  10. (可选)选择 “验证” 以在提交之前验证工作流程的 YAML 代码。

  11. 选择 “提交”,输入提交消息,然后再次选择 “提交”。

YAML
将构件指定为操作的输入(YAML 编辑器)
  1. 打开 CodeCatalyst 控制台,网址为 https://codecatalyst.aws/

  2. 选择您的项目。

  3. 在导航窗格中,选择 C I/CD,然后选择工作流程。

  4. 选择工作流程的名称。您可以按定义工作流程的源存储库或分支名称进行筛选,也可以按工作流程名称进行筛选。

  5. 选择编辑

  6. 选择 YAML。

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

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

    有关更多示例,请参阅文物示例

  8. (可选)选择 “验证” 以在提交之前验证工作流程的 YAML 代码。

  9. 选择 “提交”,输入提交消息,然后再次选择 “提交”。

在构件中引用文件

如果您的文件位于某个对象中,并且需要在其中一个工作流程操作中引用该文件,请完成以下步骤。

注意
引用构件中的文件
  • 在要引用文件的操作中,添加类似于以下内容的代码:

    Actions: My-action: Inputs: Sources: - WorkflowSource Artifacts: - artifact-name Configuration: Steps: - run: cd $CATALYST_SOURCE_DIR_artifact-name/build-output && cat file.txt

    在前面的代码中,该操作在工件名称构件的build-output目录中查找并显示该file.txt文件。

    有关更多示例,请参阅文物示例

    注意

    你可以省略$CATALYST_SOURCE_DIR_artifact-name/前缀,具体取决于你配置操作的方式。有关更多信息,请参阅以下指南。

    有关如何引用变量的指导:

    • 如果您的操作仅包含下方的一个项目Inputs(例如,它包含一个输入构件而不包含源),则可以省略前缀,只指定相对于构件根目录的文件路径。

    • 如果文件位于主输入中,也可以省略前缀。主输入要么是列出的第一个输入工件(如果没有)WorkflowSourceWorkflowSource

    • 根据您使用的操作,前缀可能会有所不同。有关更多信息,请参阅下表。

操作类型 要使用的文件路径前缀 示例

生成操作测试操作

$CATALYST_SOURCE_DIR_artifact-name/

$CATALYST_SOURCE_DIR_MyArtifact/folder1/file.txt

所有其他操作

$CATALYST_SOURCE_DIR_artifact-name/

或者

/artifacts/current-action-name/artifact-name/(此路径是 $CATALYST_SOURCE_DIR_ artifact-name 的符号链接/)

$CATALYST_SOURCE_DIR_MyArtifact/folder1/file.txt

或者

/artifacts/MyCurrentAction/MyArtifact/folder1/file.txt

正在下载工件

您可以下载并检查工作流程操作生成的构件以进行故障排除。您可以下载两种类型的神器:

  • 源构件-包含运行开始时存在的源存储库内容快照的对象。

  • 工作流程构件-在工作流程配置文件的Outputs属性中定义的工件。

下载工作流程输出的构件
  1. 打开 CodeCatalyst 控制台,网址为 https://codecatalyst.aws/

  2. 选择您的项目。

  3. 在导航窗格中,选择 C I/CD,然后选择工作流程。

  4. 选择工作流程的名称。您可以按定义工作流程的源存储库或分支名称进行筛选,也可以按工作流程名称进行筛选。

  5. a在工作流程的名称下,选择运行

  6. 在 “运行历史记录” 的 “运行 ID” 列中,选择一次运行。例如,Run-95a4d

  7. 在跑步名称下,选择工件

  8. 在构件旁边,选择下载。下载存档文件。它的文件名由七个随机字符组成。

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

文物示例

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

示例:输出构件

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

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

示例:输入由其他操作生成的构件

以下示例向您展示了如何输出调用的ARTIFACT4构件并将其输入到BuildActionBBuildActionA

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:

示例:引用多个构件中的文件

以下示例向您展示了如何输出两个名为 and in 的工件BuildActionCART5然后ART6在(下方)中引用两个名为file5.txt(在 artifact 中 ART5ART6)和 file6.txtBuildActionD(在构件中Steps)的文件。

注意

有关引用文件的更多信息,请参阅在构件中引用文件

注意

尽管该示例显示了正在使用的$CATALYST_SOURCE_DIR_ART5前缀,但您可以省略它。这是因为ART5这是主要输入。要了解有关主要输入的更多信息,请参阅在构件中引用文件

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

示例:在单个构件中引用文件

以下示例向您展示如何输出一个名为的工件BuildActionE,然后ART7在(下方ART7)中引用 file7.txtBuildActionF(在构件中Steps)。

请注意,该引用并不像在目录前面那样要求在build-output目录前面加上$CATALYST_SOURCE_DIR_工件名称前缀。示例:引用多个构件中的文件这是因为下面只指定了一个项目Inputs

注意

有关引用文件的更多信息,请参阅在构件中引用文件

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

以下示例向您展示如何输出一个名为的工件BuildActionG,然后ART8在(下方ART8)中引用 file8.txtBuildActionH(在构件中Steps)。

请注意,参考文献需要$CATALYST_SOURCE_DIR_工件名称前缀,就像在中一样。示例:引用多个构件中的文件这是因为下方指定了多个项目Inputs(一个源和一个构件),所以你需要使用前缀来指示在哪里查找文件。

注意

有关引用文件的更多信息,请参阅在构件中引用文件

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