Parallelize builds and use caches better.

This commit is contained in:
Dorian 2019-05-17 10:03:07 -04:00
parent c52e0c9821
commit 90eae25070
2 changed files with 98 additions and 19 deletions

View File

@ -1,6 +1,6 @@
version: 2.1
jobs:
build:
build-server-builder:
working_directory: ~/rookeries_ci
docker:
- image: dorianpula/circleci-test:2.0.0
@ -9,48 +9,119 @@ jobs:
- checkout
- setup_remote_docker
# Enable caching: https://circleci.com/blog/how-to-build-a-docker-image-on-circleci-2-0/
- restore_cache:
keys:
- v1-{{ arch }}-{{ .Branch }}
- v1-{{ arch }}-{{ .Branch }}-server
paths:
- /caches/rookeries-app.tar
- /caches/rookeries-server-build.tar
- run:
name: Load Docker cache
command: |
set +o pipefail
docker load --input /caches/rookeries-server-build.tar | true
- run:
name: Build image
command: |
docker-compose build server-rust
- run:
name: Save Docker cache
command: |
mkdir -p /caches
docker save --output /caches/rookeries-server-build.tar dorianpula/rookeries-build:server
- save_cache:
key: v1-{{ arch }}-{{ .Branch }}-{{ epoch }}-server
paths:
- /caches/rookeries-server-build.tar
- deploy:
name: Upload Build Images to Docker Hub
command: |
docker login -u ${DOCKER_USER} -p ${DOCKER_PASS}
docker-compose push server-build\
build-app-builder:
working_directory: ~/rookeries_ci
docker:
- image: dorianpula/circleci-test:2.0.0
steps:
- checkout
- setup_remote_docker
- restore_cache:
keys:
- v1-{{ arch }}-{{ .Branch }}-ui
paths:
- /caches/rookeries-ui-build.tar
- run:
name: Load Docker image layer cache
name: Load Docker cache
command: |
set +o pipefail
docker load --input /caches/rookeries-app.tar | true
docker load --input /caches/rookeries-server-build.tar | true
docker load --input /caches/rookeries-ui-build.tar | true
- run:
name: Build Rookeries Docker image
name: Build app-builder image
command: |
cargo make docker-build
docker-compose build app-build
- run:
name: Save Docker image layer cache
name: Save Docker cache
command: |
mkdir -p /caches
docker save --output /caches/rookeries-app.tar dorianpula/rookeries:latest
docker save --output /caches/rookeries-server-build.tar dorianpula/rookeries-build:server
docker save --output /caches/rookeries-ui-build.tar dorianpula/rookeries-build:app
- save_cache:
key: v1-{{ arch }}-{{ .Branch }}-{{ epoch }}
key: v1-{{ arch }}-{{ .Branch }}-{{ epoch }}-ui
paths:
- /caches/rookeries-app.tar
- /caches/rookeries-server-build.tar
- /caches/rookeries-ui-build.tar
- deploy:
name: Upload Build Images to Docker Hub
command: |
docker login -u ${DOCKER_USER} -p ${DOCKER_PASS}
docker-compose push server-build app-build
docker-compose push app-build
build-rookeries:
working_directory: ~/rookeries_ci
docker:
- image: dorianpula/circleci-test:2.0.0
steps:
- checkout
- setup_remote_docker
- restore_cache:
keys:
- v1-{{ arch }}-{{ .Branch }}
paths:
- /caches/rookeries-app.tar
- run:
name: Load Docker image layer cache
command: |
set +o pipefail
docker load --input /caches/rookeries-app.tar | true
- run:
name: Build Rookeries image
command: |
docker-compose build rookeries
- run:
name: Save Docker image layer cache
command: |
mkdir -p /caches
docker save --output /caches/rookeries-app.tar dorianpula/rookeries:latest
- save_cache:
key: v1-{{ arch }}-{{ .Branch }}-{{ epoch }}
paths:
- /caches/rookeries-app.tar
test-server:
working_directory: ~/rookeries_ci
@ -100,13 +171,18 @@ workflows:
version: 2
build-test-push:
jobs:
- build
- build-server-builder
- build-app-builder
- build-rookeries:
requires:
- build-app-builder
- builder-server-builder
- test-server:
requires:
- build
- build-rookeries
- test-app:
requires:
- build
- build-rookeries
# TODO: Enable once issues resolved with builds.
# - test-plugins:
# requires:

View File

@ -7,6 +7,8 @@ services:
target: final
cache_from:
- dorianpula/rookeries:latest
- dorianpula/rookeries-build:app
- dorianpula/rookeries-build:server
image: dorianpula/rookeries:latest
env_file: docker.env
depends_on:
@ -31,6 +33,7 @@ services:
target: node_build
cache_from:
- dorianpula/rookeries-build:app
- dorianpula/rookeries-build:server
image: dorianpula/rookeries-build:app
env_file: docker.env
depends_on: