feat: Cache intermediate docker images

This commit is contained in:
Robert Prehn 2021-06-10 14:17:35 -05:00
parent cda4080b2d
commit 3b016bb0ee
4 changed files with 48 additions and 10 deletions

View file

@ -36,15 +36,9 @@ build_image_for_commit:
services:
- name: docker:20.10-dind
before_script:
- docker login "https://${CI_REGISTRY}" -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
- docker pull $CI_REGISTRY_IMAGE:latest || true
- script/ci-docker-prebuild
script:
# This enables fast parallel builds
- export DOCKER_BUILDKIT=1
- docker build --cache-from $CI_REGISTRY_IMAGE:latest -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
# Push the commit SHA tagged version to registry. We will later choose to tag that as stable
# if everything passes.
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
- script/ci-docker-build
# If tests pass, tag the commit and update package versions
deploy_to_tags:

View file

@ -1,4 +1,4 @@
FROM elixir:1.10.4-alpine AS elixir1
FROM elixir:1.10.4-alpine AS elixir-builder
RUN mix local.hex --force \
&& mix local.rebar --force
@ -37,7 +37,7 @@ COPY --from=0 /root/app/ /root/app/
RUN npm install
RUN npm run deploy
FROM elixir1
FROM elixir-builder
RUN mix deps.compile

27
script/ci-docker-build Executable file
View file

@ -0,0 +1,27 @@
#!/bin/sh
export DOCKER_BUILDKIT=1
docker build \
--target elixir-builder \
--cache-from $CI_REGISTRY_IMAGE:$PARENT_COMMIT-elixir-builder \
--cache-from $CI_REGISTRY_IMAGE:latest-elixir-builder \
-t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-elixir-builder .
docker build \
--target asset-builder \
--cache-from $CI_REGISTRY_IMAGE:$PARENT_COMMIT-asset-builder \
--cache-from $CI_REGISTRY_IMAGE:latest-asset-builder \
-t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-asset-builder .
docker build \
--target asset-builder \
--cache-from $CI_REGISTRY_IMAGE:$PARENT_COMMIT \
--cache-from $CI_REGISTRY_IMAGE:latest \
-t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
# Push the commit SHA tagged version to registry. We will later choose to tag that as stable
# if everything passes.
docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-elixir-builder
docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-asset-builder
docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

17
script/ci-docker-prebuild Executable file
View file

@ -0,0 +1,17 @@
#!/bin/sh
PARENT_COMMIT=`git rev-list --parents -n 1 HEAD | cut -d' ' -f2`
docker login "https://${CI_REGISTRY}" -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
docker pull $CI_REGISTRY_IMAGE:$PARENT_COMMIT-elixir-builder || \
docker pull $CI_REGISTRY_IMAGE:latest-elixir-builder || \
true
docker pull $CI_REGISTRY_IMAGE:$PARENT_COMMIT-asset-builder || \
docker pull $CI_REGISTRY_IMAGE:latest-asset-builder || \
true
docker pull $CI_REGISTRY_IMAGE:$PARENT_COMMIT || \
docker pull $CI_REGISTRY_IMAGE:latest || \
true