Github操作docker缓存

时间:2020-10-02 16:14:06

标签: docker github-actions

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

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

是否有一种方法可以缓存此操作的docker映像,因此不必每次都构建?运行需要很长时间,并且在其余步骤之前先运行。我确信这对于拉码头图像的类似类型的Github操作很常见。

泊坞窗映像看起来很苗条,所以我不确定尝试优化映像本身是否会有任何好处。与如何配置Github操作有关。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

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: 前缀,以及从 @master:master 的更改,以便将名称转换为有效的图像名称。< /p>

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

原始回复

一个很好的问题,在官方文档中可以找到很少的信息(虽然GitHub acknowledge the delay in their docs)。

GitHub 员工回复

我对您进行了搜索,并设法在 2019 年 9 月的 GitHub 社区论坛上找到了有关此确切主题的 article。从 2019 年 7 月开始,它不可避免地与此 article 相关联。

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

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

<块引用>

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

不幸的是,Github 操作文档的 link 已损坏,但这确实表明操作的作者可以在修改其操作后允许这种行为

替代想法

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

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

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

答案 1 :(得分:0)

docker博客上有一篇很棒的文章,解释了如何使用action / cache和buildx(允许您指定自定义缓存路径)来缓存docker映像。 可以在这里找到:https://www.docker.com/blog/docker-github-actions/