首页 > 解决方案 > Github 操作 docker 缓存

问题描述

我认为这对许多其他人有用。

我正在使用https://github.com/phips28/gh-action-bump-version在 Github Actions 中自动提升 NPM 版本。

有没有办法缓存这个动作的 docker 图像,所以它不必每次都构建?运行需要很长时间,并且在其余步骤之前运行。我确信这对于拉取 docker 图像的类似类型的 Github Actions 来说很常见。

docker 图像看起来很纤细,所以我不确定尝试优化图像本身是否有任何好处。更多关于如何配置 Github 操作。

有什么建议么?

标签: dockergithub-actions

解决方案


TLDR

有些!您可以将 GitHub 工作流文件更改为pull存储库中的图像,而不是building每次运行。虽然这不会缓存图像,但速度要快得多。这可以通过将流程编辑为如下所示来实现:

      - name: 'Automated Version Bump'
        id: version-bump
        uses: 'docker://phips28/gh-action-bump-version:master'
        with:
          tag-prefix: 'v'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

请注意语句的docker://前缀uses:,加上从@masterto的更改:master,以便将名称转换为有效的图像名称。

我已经在该存储库上打开了一个PR并提供了建议的修复:^)

原始回复

一个非常好的问题,在官方文档中可以找到很少的信息(尽管GitHub 承认他们的文档有延迟)。

GitHub 员工回复

我搜索了你,并设法在 GitHub 社区论坛上找到了 2019 年 9 月关于这个确切主题的文章。它不可避免地与2019 年 7 月的这篇文章相关联。

关于每次构建如何仍然使用 docker build 缓存,减少时间,但在使用最新版本的基础映像等方面允许灵活性,有一个很好的解释。

如果您不关心更新的灵活性,并且只想要尽可能短的构建时间,那么有一个建议的解决方案,尽管我不确定该语法当前是否仍然有效:

但是假设我不希望我的 Action 每次运行时都评估 Dockerfile,因为我想要绝对最快的运行时。我想要一个预定义的 Docker 容器启动并开始工作。你也可以拥有它!如果您创建 Docker 映像并将其上传到 Docker Hub 或其他公共注册表,则可以指示您的 Action 使用该 Docker 映像,特别是使用 uses 键中的 docker:// 形式。有关详细信息,请参阅 GitHub Actions 文档 72。这需要更多的前期工作和维护,但如果您不需要上述 Dockerfile 评估系统提供的灵活性,那么它可能值得权衡。

不幸的是,指向 Github 操作文档的链接已损坏,但这确实表明该操作的作者如果修改了他们的操作就可以允许这种行为

替代想法

如果您需要控制执行程序主机上的缓存真正缓存图像)的能力,那么您可能会考虑托管自己的 GitHub运行器,因为您可以完全控制那里的图像。虽然我认为这可能是一种威慑,因为 GitHub 操作在很大程度上是一项免费服务(有限制,这可能就是其中之一!)

您可能需要考虑添加一个利用文件缓存操作的任务,并尝试通过or将gh-action-bump-version导出到文件内容,然后在下次运行时重新充气。但是,这会带来复杂性,从长远来看可能无法节省您的时间。docker commitdocker save. 编辑:这是一个可怕的想法,因为我们知道操作可以支持从注册表中提取图像。

我希望这对您和其他任何搜索更多信息的人有所帮助


推荐阅读