如何从GitHub Action缓存Docker镜像

5

我有一个场景,使用maven和docker在GitHub工作流上构建了一个应用程序。

然后,当应用程序(带有docker镜像)构建完成后,应用程序的集成测试失败了。

我经常需要在重新运行GitHub工作流之前更改现有的集成测试,而不对应用程序本身进行更改。这会导致使用java和docker构建(并在本地测试)该操作。

构建过程已经完成,并且一个docker镜像已上传到GitHub Packages。如何检查此应用程序是否已经拥有docker镜像?

我可以使用actions/cache@v2(https://github.com/actions/cache)吗?怎么使用?它没有提及可以缓存Docker......


你的目标是加速构建过程,即使没有代码更改吗? - Max
2
是的...这是为了加快构建过程。当构建过程已经执行了此步骤时,等待Maven构建带有JUnit测试的过程非常烦人... - jactor-rises
1个回答

2
我建议使用Docker的构建推送操作来实现这个目的。通过build-push-action,您可以使用内联缓存、注册表缓存或实验性缓存后端API来缓存您的容器镜像:

内联缓存

name: Build and push
uses: docker/build-push-action@v2
with:
    context: .
    push: true
    tags: user/app:latest
    cache-from: type=registry,ref=user/app:latest
    cache-to: type=inline

参考Buildkit文档

注册表缓存

name: Build and push
uses: docker/build-push-action@v2
with:
    context: .
    push: true
    tags: user/app:latest
    cache-from: type=registry,ref=user/app:buildcache
    cache-to: type=registry,ref=user/app:buildcache,mode=max

请参考Buildkit文档

缓存后端API

name: Build and push
uses: docker/build-push-action@v2
with:
    context: .
    push: true
    tags: user/app:latest
    cache-from: type=gha
    cache-to: type=gha,mode=max

请参考Buildkit文档
我个人更喜欢使用缓存后端API,因为它易于设置,并在减少整个CI流水线运行时间方面提供了巨大的帮助。
由于上述工作流程本质上实现了缓存,因此您不需要使用cache action,它为我们抽象了工作流程。
以下是一个例子:https://github.com/moja-global/FLINT.Reporting/blob/d7504909f8f101054e503a2993f4f70ca92c2577/.github/workflows/docker.yml#L54

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接