TL;DR I want to store the image cache from a job as an artifact so that I can use locally built images in downstream jobs. How do I do that?
Full question:
I want to have a three-stage build process in which I (1) create a Docker image, (2) run tests within it, and (3) push the resulting image to the GitLab repository if the current branch is master
and all the tests pass.
I am using a shared runner, so I believe (but am not certain) that my only option for doing so is the “Docker-in-Docker” approach as discussed in the GitLab CI documentation.
Each job runs within an independent Docker container. As such, if I build a Docker image during the build
stage, I cannot access that image unless I push it to the GitLab registry. But that means pushing to the registry even if the current stage is not master
, or if the tests don’t ultimately pass.
The ideal solution would be to treat the locally built Docker image as a dependency for the downstream jobs, and not get the remote registry involved until all appropriate conditions are met. Is there a way to do this?