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

View File

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