跳到主要内容

将工作流数据存储为工件

工件允许您在工作流中的作业之间共享数据,并在工作流完成后存储数据。

关于工作流工件

工件允许您在作业完成后保存数据,并与同一工作流中的另一个作业共享该数据。工件是在工作流运行期间生成的文件或文件集合。例如,您可以在工作流运行结束后使用工件保存构建和测试输出。在运行中调用的所有操作和工作流都具有对该运行工件的写入权限。

默认情况下,GitHub将构建日志和工件存储90天,并且可以自定义此保留期。有关详细信息,请参阅“使用限制、计费和管理。”每次有人向拉取请求推送新的提交时,拉取请求的保留期都会重新开始。

以下是您可以上传的一些常见工件:

  • 日志文件和核心转储
  • 测试结果、失败和屏幕截图
  • 二进制或压缩文件
  • 压力测试性能输出和代码覆盖率结果

存储工件使用GitHub上的存储空间。GitHub Actions对公共存储库中标准GitHub-hosted跑步者和自托管跑步者免费使用。对于私有存储库,每个GitHub帐户都会收到一定数量的免费分钟数和存储空间,供GitHub-hosted跑步者使用,具体取决于帐户的计划。超出包含金额的任何使用都由支出限制控制。有关详细信息,请参阅“管理GitHub操作的帐单

工件在工作流运行期间上传,您可以在UI中查看工件的名称和大小。当使用GitHub UI下载工件时,作为工件一部分单独上传的所有文件都会压缩到一个文件中。这意味着计费是根据上传工件的大小而不是zip文件的大小来计算的。

GitHub提供了两个操作,您可以使用它们上传和下载构建工件。有关更多信息,请参阅上传艺术品下载-艺术品行动。

要在作业之间共享数据,请执行以下操作:

  • 正在上载文件:为上传的文件指定名称,并在作业结束前上传数据。
  • 正在下载文件:您只能下载在同一工作流运行期间上载的项目。下载文件时,可以按名称引用它。

作业的步骤在运行机器上共享相同的环境,但在各自的进程中运行。要在作业中的步骤之间传递数据,可以使用输入和输出。有关输入和输出的更多信息,请参阅“GitHub操作的元数据语法

比较工件和依赖项缓存

工件和缓存是相似的,因为它们提供了在GitHub上存储文件的能力,但每个功能都提供不同的用例,不能互换使用。

  • 如果要重用在作业或工作流运行之间不经常更改的文件,例如来自包管理系统的构建依赖项,请使用缓存。
  • 当您希望保存作业生成的文件以在工作流运行结束后查看时,请使用工件,例如生成的二进制文件或生成日志。

有关依赖项缓存的详细信息,请参阅“缓存依赖项以加快工作流

上传构建和测试工件

您可以创建持续集成(CI)工作流来构建和测试代码。有关使用GitHub操作执行CI的详细信息,请参阅“关于持续集成

构建和测试代码的输出通常会生成可用于调试测试失败和可部署的生产代码的文件。您可以配置工作流来构建和测试推送到存储库的代码,并报告成功或失败状态。您可以上载生成和测试输出以用于部署、调试失败的测试或崩溃以及查看测试套件覆盖范围。

您可以使用上传艺术品上传工件的操作。上传工件时,可以指定单个文件或目录,也可以指定多个文件或目录。您还可以排除某些文件或目录,并使用通配符模式。我们建议您为工件提供一个名称,但如果没有提供名称,那么人工制品将用作默认名称。有关语法的更多信息,请参阅操作/上传艺术品行动。

例子

例如,您的存储库或web应用程序可能包含必须转换为CSS和JavaScript的SASS和TypeScript文件。假设生成配置输出距离目录中,您可以将文件部署在距离如果所有测试都成功完成,则将目录添加到web应用程序服务器。

|--hello-world(存储库)|●距离|●测试|千兆赫(src)|●——sass/app.scss|●应用程序|??输出|⑪——测试|

此示例显示如何为Node.js项目创建工作流,该项目在型钢混凝土目录中运行测试测验目录。你可以假设npm测试生成名为的代码覆盖率报告code-coverage.html存储在输出/测试/目录。

工作流上载距离目录,但不包括任何降价文件。它还上传code-coverage.html报告为另一个工件。

亚马尔
姓名: 节点 CI公司

日期:[]作业:
  构建和测试:
    运行时间: ubuntu最新
    步骤:
      - 姓名: 结账 储存库
        使用: 行动/签出@v4
      - 姓名: 净现值法 安装, 构建,  测试
        运行: |npm安装npm运行生成--if-presentnpm测试      - 姓名: 档案文件 生产 人工产品
        使用: 行动/上传artifact@v4
        具有:
          姓名: dist-无降价
          路径: |距离!dist/**/*.md      - 姓名: 档案文件 代码 新闻报道 结果
        使用: 行动/上传artifact@v4
        具有:
          姓名: 代码平均值报告
          路径: output/test/code-coverage.html

为生成生成生成工件证明

注释

人工制品认证处于公开测试阶段,可能会发生更改。

工件证明使您能够为所构建的软件创建可靠的来源和完整性保证。反过来,使用您的软件的人可以验证您的软件是在哪里以及如何构建的。

当您用软件生成工件证明时,您会创建经过加密签名的声明,以确定构建的来源并包含以下信息:

  • 指向与工件关联的工作流的链接。
  • 工件的存储库、组织、环境、提交SHA和触发事件。
  • OIDC令牌中用于确定来源的其他信息。有关详细信息,请参阅“关于OpenID Connect的安全强化

您还可以生成工件证明,其中包括关联的软件BOM表(SBOM)。将构建与其中使用的开放源代码依赖项列表相关联可以提供透明度,并使使用者能够遵守数据保护标准。

您可以在构建运行后,在构建生成的工件列表下面访问证明。

有关详细信息,请参阅“使用工件证明来确定构建的出处

配置自定义工件保留期

您可以为工作流创建的各个工件定义自定义保留期。使用工作流创建新工件时,可以使用保留天数使用上传艺术品行动。这个示例演示了如何为名为我的艺术品:

亚马尔
  - 姓名: '上传工件'
    使用: 行动/上传artifact@v4
    具有:
      姓名: 我的艺术品
      路径: 我的文件.txt
      保留天数: 5

这个保留天数值不能超过存储库、组织或企业设置的保留限制。

下载或删除工件

在工作流运行期间,可以使用下载-艺术品下载以前在同一工作流中上载的工件的操作。

工作流运行完成后,您可以在GitHub上或使用REST API下载或删除工件。有关详细信息,请参阅“下载工作流工件," "删除工作流工件、“和”GitHub操作工件的REST API端点

在工作流运行期间下载工件

这个操作/下载-艺术品操作可用于在工作流运行期间下载以前上传的工件。

注:您只能下载在同一工作流运行期间上载的工作流中的工件。

指定工件的名称以下载单个工件。如果您上传了一个工件而没有指定名称,那么默认名称为人工制品.

- 姓名: 下载  单一的 人工制品
  使用: 行动/下载artifact@v4
  具有:
    姓名: 我的艺术品

您还可以通过不指定名称下载运行的工作流中的所有工件。如果您正在处理大量工件,这将非常有用。

- 姓名: 下载 全部的 工作流 运行 人工制品
  使用: 行动/下载artifact@v4

如果下载所有工作流运行的工件,则会使用其名称为每个工件创建一个目录。

有关语法的更多信息,请参阅操作/下载-艺术品行动。

在工作流中的作业之间传递数据

您可以使用上传艺术品下载-艺术品在工作流中的作业之间共享数据的操作。此工作流示例说明了如何在同一工作流中的作业之间传递数据。有关更多信息,请参阅操作/上传艺术品下载-艺术品行动。

依赖于上一个作业的工件的作业必须等待依赖作业成功完成。此工作流使用需要关键字以确保作业_1,作业2、和作业3按顺序运行。例如,作业2要求作业_1使用需要:job_1语法。

作业1执行以下步骤:

  • 执行数学计算并将结果保存到名为数学作业.txt.
  • 使用上传艺术品上载的操作数学作业.txt具有工件名称的文件家庭作业准备.

作业2使用上一个作业中的结果:

  • 下载家庭作业准备在上一个作业中上载的工件。默认情况下下载-艺术品操作将工件下载到正在执行步骤的工作区目录。您可以使用路径输入参数以指定不同的下载目录。
  • 读取中的值数学作业.txt文件,执行数学计算,并将结果保存到数学作业.txt再次覆盖其内容。
  • 上传数学作业.txt文件。由于工件在中被认为是不可变的第4版,工件被传递给不同的输入,家庭作业_最终,作为一个名字。

作业3显示上一个作业中上载的结果:

  • 下载家庭作业_最终作业2中的工件。
  • 将数学方程式的结果打印到日志中。

在此工作流示例中执行的完整数学操作是(3+7)x 9=90.

亚马尔
姓名: 分享 数据 之间 工作

日期:[]作业:
  作业1:
    姓名: 添加   7
    运行时间: ubuntu最新
    步骤:
      - 外壳: 猛击
        运行: |expr 3+7>数学作业.txt      - 姓名: 上传 数学 结果 对于 工作 1
        使用: 行动/上传artifact@v4
        具有:
          姓名: 家庭作业准备
          路径: 数学作业.txt

  作业2:
    姓名: 乘法 通过 9
    需要: 作业_1
    运行时间: windows-最新
    步骤:
      - 姓名: 下载 数学 结果 对于 工作 1
        使用: 行动/下载artifact@v4
        具有:
          姓名: 家庭作业准备
      - 外壳: 猛击
        运行: |value=`cat math-homework.txt`expr$value\*9>数学作业.txt      - 姓名: 上传 数学 结果 对于 工作 2
        使用: 行动/上传artifact@v4
        具有:
          姓名: 家庭作业_最终
          路径: 数学作业.txt

  作业3:
    姓名: 显示器 结果
    需要: 作业2
    运行时间: macOS测试
    步骤:
      - 姓名: 下载 数学 结果 对于 工作 2
        使用: 行动/下载artifact@v4
        具有:
          姓名: 家庭作业_最终
      - 姓名: 打印 这个 最终的 结果
        外壳: 猛击
        运行: |value=`cat math-homework.txt`echo结果是$value

工作流运行将存档它生成的任何工件。有关下载存档工件的更多信息,请参阅“下载工作流工件

进一步阅读