我认为这对其他许多人都是有用的。
我正在使用https://github.com/phips28/gh-action-bump-version在Github Actions中自动更改NPM版本。
是否有一种方法可以缓存此操作的docker映像,因此不必每次都构建?运行需要很长时间,并且在其余步骤之前先运行。我确信这对于拉码头图像的类似类型的Github操作很常见。
泊坞窗映像看起来很苗条,所以我不确定尝试优化映像本身是否会有任何好处。与如何配置Github操作有关。
有什么建议吗?
答案 0 :(得分:2)
有点!您可以将 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)。
我对您进行了搜索,并设法在 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 commit
或 docker save
将 gh-action-bump-version 导出到文件内容,然后在下次跑步时重新充气。但是,这会带来复杂性,从长远来看可能不会为您节省时间。
我希望这对您和其他任何搜索更多信息的人有帮助?
答案 1 :(得分:0)
docker博客上有一篇很棒的文章,解释了如何使用action / cache和buildx(允许您指定自定义缓存路径)来缓存docker映像。 可以在这里找到:https://www.docker.com/blog/docker-github-actions/。