简述
可以!您可以更改GitHub工作流文件,从存储库中拉取
图像而不是每次构建
。虽然这样做无法缓存图像,但速度明显更快。可以通过编辑您的流程来实现以下效果:
- 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 }}
请注意在
uses:
语句中的
docker://
前缀,以及从
@master
更改为
:master
,以将名称转换为有效的镜像名称。
我已经在该存储库上打开了一个
PR并提出了建议的修复:^)
原始响应
这是一个非常好的问题,在官方文档中很难找到关于这个问题的信息(尽管
GitHub承认他们的文档有延迟)。
GitHub员工回复
我为您搜索到了一篇
文章,它来自于GitHub社区论坛,发布于2019年9月,正好讨论了这个话题。它不可避免地链接到了这篇
文章,该文章发布于2019年7月。
有一个关于如何每次构建仍然利用Docker构建缓存的精彩解释,从而减少时间,但允许在使用最新版本的基础镜像等方面具有灵活性。
如果您不关心更新的灵活性,只想获得最短的构建时间,那么有一个提议的解决方案,尽管我不确定当前该语法是否仍然有效:
但是假设我不希望我的操作每次运行时甚至评估Dockerfile,因为我想要绝对最快的运行时间。我想要预定义的Docker容器被启动并立即开始工作。你也可以做到这一点!如果您创建了一个Docker镜像并将其上传到Docker Hub或其他公共注册表,则可以使用uses键中的docker://形式指示您的操作专门使用该Docker镜像。有关详细信息,请参见GitHub Actions文档72。这需要更多的前期工作和维护,但是如果您不需要上述Dockerfile评估系统提供的灵活性,则可能值得权衡。
很遗憾,指向Github actions文档的
链接已经损坏,但这表明如果动作者修改他们的操作,他们可以允许这种行为。
备选想法
如果您需要控制执行程序主机上的缓存(以真正地缓存映像),则可以考虑
托管自己的GitHub运行程序,因为您将完全控制那里的映像。尽管我想象这可能是一个障碍,鉴于GitHub actions基本上是一个免费服务(有限制,这也许是其中之一!)
你可能想考虑添加一个利用
文件缓存操作 的任务,并尝试通过
docker commit
或
docker save
将
gh-action-bump-version 导出到文件内容,然后在下一次运行时重新inflate它。但是,这会增加复杂性,并且从长远来看可能不会节省时间。
编辑: 现在我们知道操作可以支持从仓库拉取镜像,这是一个可怕的想法。希望这可以帮助你和其他正在寻找更多信息的人。
FROM
。你觉得呢? - patrickaction.yml
中,这样似乎更快,以下是一个例子:https://github.com/strawberry-graphql/release-cards/blob/main/action.yml#L15 - patrick