【问题标题】:github actions not discovering artifacts uploaded between runsgithub 操作未发现在运行之间上传的工件
【发布时间】:2021-09-01 13:11:38
【问题描述】:

我有一组静态二进制文件,我目前正在重新下载每次 CI 运行。我需要这些二进制文件进行测试。我想在 github 操作上缓存这些操作系统特定的二进制文件,这样我就不需要每次都重新下载它们。

这里的一个关键考虑因素是二进制文件不会在作业之间更改,它们是第 3 方二进制文件,我不想每次提交 PR 到 github 时都从第 3 方站点重新下载。这些二进制文件用于测试,第 3 方每 6 个月发布一次版本

我已尝试通过 github 操作使用 upload-artifactdownload-artifact 流来执行此操作。

我首先创建了一个动作来上传工件。这些是静态二进制文件,我想在存储库范围内缓存并在每次打开 PR 时重复使用。

这是执行此操作的提交:

https://github.com/bitcoin-s/bitcoin-s/runs/2841148806

我在同一个 CI 作业上推送了后续提交并将逻辑添加到 download-artifact。当它运行时,它声称没有具有该名称的工件,尽管之前提交的同一作业上传它

https://github.com/bitcoin-s/bitcoin-s/pull/3281/checks?check_run_id=2841381241#step:4:11

我做错了什么?

下一个

【问题讨论】:

    标签: github github-actions


    【解决方案1】:

    工件和缓存实现相同的目的,但应该用于不同的用例。来自GitHub docs

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

    • 当您想重用不经常更改的文件时使用缓存 在作业或工作流运行之间。
    • 要保存时使用工件 工作流结束后要查看的作业生成的文件。

    在您的情况下,您可以使用缓存并设置 cache 操作。您将需要一个key 和一个path,它看起来像这样:

        - name: Cache dmg
          uses: actions/cache@v2
          with:
            key: "bitcoin-s-dmg-${{steps.previoustag.outputs.tag}}-${{github.sha}}"
            path: ${{ env.pkg-name }}-${{steps.previoustag.outputs.tag}}.dmg
    

    当缓存命中(找到您的key)时,该操作会将缓存文件恢复到您指定的path

    当缓存未命中(未找到您的key)时,会创建一个新缓存。

    通过使用contexts,您可以更新您的key 并观察文件或目录的变化。例如。每当您的package-lock.json 文件更改时更新缓存,您可以使用${{ hashFiles('**/package-lock.json') }}

    【讨论】:

    • 我对缓存的理解是,它需要在第一次打开 PR 时重新下载工件。这是对我们当前流程的改进,在每次提交时都会重新下载它们,但理想情况下,我们只会在整个 repo 中缓存工件。
    • 缓存存储依赖关系 between 工作流在 GitHub 上运行。所以它被缓存在整个仓库中。每次工作流启动时都会恢复此缓存。
    猜你喜欢
    • 2020-02-02
    • 2019-12-21
    • 2020-04-19
    • 2020-02-15
    • 2023-02-14
    • 2020-11-04
    • 2022-11-03
    • 1970-01-01
    • 2022-12-08
    相关资源
    最近更新 更多