我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

使用构件持久化工作流程数据

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

GitHub 操作 is available with GitHub Free, GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. GitHub 操作 is unavailable for per-repository plans, which are legacy billing plans. For more information, see "GitHub's products."

本文内容

关于工作流程构件

构件用于在作业完成后保存数据。 构件是指在工作流程运行过程中产生的文件或文件集。 You can use artifacts to pass data between jobs in a workflow or persist build and test output after a workflow run has ended. GitHub stores artifacts for 90 days for pushes and pull requests. 每当有人推送新提交到拉取请求时,拉取请求的保存期就会重新开始计算。

Storing artifacts uses storage space on GitHub. GitHub 操作 usage is free for public repositories. For private repositories, each GitHub account receives a certain amount of free minutes and storage, depending on the product used with the account. For more information, see "Managing billing for GitHub 操作."

您必须在工作流程运行时上传构件。 GitHub 提供两项可用于上传和下载构建构件的操作。 上传到工作流程运行的文件将使用 .zip 格式存档。 更多信息请参阅 action/upload-artifactdownload-artifact 操作。

工作流程中的每项作业都在全新的虚拟环境实例中运行。 当作业完成时,运行程序将终止并删除虚拟环境的实例。

要在作业之间共享数据:

  • 您可以在作业结束前上传数据以保存工作流程运行中的文件。 上传存档时,必须对其命名。
  • 上传文件后,您可以在同一工作流运行中的另一个作业中下载它。 下载存档时,您可以通过名称引用存档。 您只能下载在同一工作流程运行期间上传的构件。

作为作业一部分的步骤在相同的虚拟环境中运行,但在其各自的进程中运行。 要在作业的步骤之间传递数据,您可以使用输入和输出。 有关输入和输出的更多信息,请参阅“GitHub 操作 的元数据语法”。

这些是您可能想要上传的一些常见构建和测试输出构件:

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

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

You can use the upload-artifact and download-artifact actions to share data between jobs in a workflow. 此示例工作流程说明如何在相同工作流程中的任务之间传递数据。 更多信息请参阅 action/upload-artifactdownload-artifact 操作。

依赖于以前作业构件的作业必须等待依赖项成功完成。 此工作流程使用 needs 关键词确保 job_1job_2job_3 按顺序运行。 例如, job_2 需要 job_1 使用 needs: job_1 语法。

作业1执行以下步骤:

  • 添加值 3 和 7 并输出值到名为 math-home-work.txt 的文本文件。
  • 使用 upload-artifact 操作上传名为 homeworkmath-homework.txt 文件。 该操作将文件置于一个名为 homework 的目录中。

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

  • 下载上一个作业中上传的 homework 构件。 默认情况下, download-artifact 操作会将构件下载到该步骤执行的工作区目录中。 您可以指定另一个用于下载操作的目录使用 路径 输入参数。
  • 读取 homework/math-homework.txt 文件中的值,并将该值乘以 9,然后用新值更新该文件。
  • 更新 math-homework.txt 文件。 此上传会覆盖之前的上传,因为两次上传共用同一名称。

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

  • 下载 homework 构件。
  • 将数学方程式的结果打印到日志中。

此工作流程示例中执行的完整数学运算为 (3 + 7) x 9 = 90

name: Share data between jobs

on: [push]

jobs:
  job_1:
    name: Add 3 and 7
    runs-on: ubuntu-latest
    steps:
      - shell: bash
        run: |
          expr 3 + 7 > math-homework.txt
      - name: Upload math result for job 1
        uses: actions/upload-artifact@v1
        with:
          name: homework
          path: math-homework.txt

  job_2:
    name: Multiply by 9
    needs: job_1
    runs-on: windows-latest
    steps:
      - name: Download math result for job 1
        uses: actions/download-artifact@v1
        with:
          name: homework
      - shell: bash
        run: |
          value=`cat homework/math-homework.txt`
          expr $value \* 9 > homework/math-homework.txt
      - name: Upload math result for job 2
        uses: actions/upload-artifact@v1
        with:
          name: homework
          path: homework/math-homework.txt

  job_3:
    name: Display results
    needs: job_2
    runs-on: macOS-latest
    steps:
      - name: Download math result for job 2
        uses: actions/download-artifact@v1
        with:
          name: homework
      - name: Print the final result
        shell: bash
        run: |
          value=`cat homework/math-homework.txt`
          echo The result is $value

要在作业之间传递数据以执行数学工作流程

在工作流程运行之间共享数据

一个工作流程结束后,您可以通过在 Actions(操作)选项卡中找到工作流程运行,下载 GitHub 上已上传构件的存档。 GitHub 当前不提供用于检索已上传构件的 REST API。

如果您需要访问之前运行的工作流程中的构件,您需要在某处存储这些构件。 例如,您可以在工作流程结束时运行一个脚本,以便在 Amazon S3 或 Artifactory 上存储构建构件,然后使用存储服务的 API 在未来的工作流程中检索这些构件。

上传构建和测试构件

您可以创建一个持续集成 (CI) 工作流程来在 GitHub 托管虚拟环境中构建和测试您的代码。 关于使用 GitHub 操作 执行 CI 的更多信息,请参阅 关于持续集成

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

You can use the upload-artifact action to upload artifacts. 更多信息请参阅 actions/upload-artifact 操作。

示例

例如,您的仓库或 Web 应用程序可能包含必须编译为 CSS 和 JavaScript 的 SASS 和 Typescript 文件。 假设您的构建配置输出 dist 目录中已编译的文件,如果所有测试均已成功完成,则可将 dist 目录中的文件部署到您的 Web 应用程序服务器。

|-- hello-world (repository)
|   └── dist
|   └── tests
|   └── src
|       └── sass/app.scss
|       └── app.ts
|   └── output
|       └── test
|   

本例向您展示如何创建 Node.js 项目的工作流程,该项目在 src 目录中 builds 代码,并在 tests 目录中运行测试。 您可以假设运行 npm test 会产生名为 code-coverage.html、存储在 output/test/ 目录中的代码覆盖报告。

工作流程会将 dist 目录和 code-coverage.html 中的生产构件作为两个不同的构件上传。

name: Node CI

on: [push]

jobs:
  build_and_test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v1
      - name: npm install, build, and test
        run: |
          npm install
          npm run build --if-present
          npm test
      - name: Archive production artifacts
        uses: actions/upload-artifact@v1
        with:
          name: dist
          path: dist
      - name: Archive code coverage results
        uses: actions/upload-artifact@v1
        with:
          name: code-coverage-report
          path: output/test/code-coverage.html

工作流程上传构件工作流程运行的图像

延伸阅读

问问别人

找不到要找的内容?

联系我们