From 90eae2507086e604e53416ea44e0b2bea5e9f850 Mon Sep 17 00:00:00 2001 From: Dorian Pula Date: Fri, 17 May 2019 10:03:07 -0400 Subject: [PATCH] Parallelize builds and use caches better. --- .circleci/config.yml | 114 +++++++++++++++++++++++++++++++++++-------- docker-compose.yml | 3 ++ 2 files changed, 98 insertions(+), 19 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 78b4ef5..7ea8646 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -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: diff --git a/docker-compose.yml b/docker-compose.yml index 792888a..78d1419 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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: