From 286da7ee793253760a56c4f5ccc24369d7106122 Mon Sep 17 00:00:00 2001 From: Ludovic Claude <ludovic.claude54@gmail.com> Date: Mon, 11 Sep 2017 16:43:55 +0200 Subject: [PATCH] Use multistage Docker build --- .circleci/config.yml | 35 +++++++++++++++++++++ Dockerfile | 16 ++++++++-- Dockerfile.builder | 17 ---------- captain.yml | 16 +--------- circle.yml | 26 --------------- docker/{runner => }/README.md | 0 docker/builder/build-in-docker.sh | 11 ------- docker/{runner => }/config/application.tmpl | 0 docker/{runner => }/run.sh | 2 +- 9 files changed, 50 insertions(+), 73 deletions(-) create mode 100644 .circleci/config.yml delete mode 100644 Dockerfile.builder delete mode 100644 circle.yml rename docker/{runner => }/README.md (100%) delete mode 100755 docker/builder/build-in-docker.sh rename docker/{runner => }/config/application.tmpl (100%) rename docker/{runner => }/run.sh (85%) diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..7495d3b4b --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,35 @@ +--- + +version: 2 +jobs: + build: + working_directory: ~/src + docker: + - image: hbpmip/docker-compose-for-ci:17.06-0 + environment: + - CIRCLECI: true + steps: + - setup_remote_docker: + version: 17.06.0-ce + - checkout + - run: + name: "Install requirements" + command: | + docker --version + pre-commit install + - run: + name: "Validate code quality" + command: | + pre-commit run --all-files + - run: + name: "Build project" + command: | + PATH=$PATH:/$HOME/.captain/bin/ ./build.sh + - run: + name: "Test project" + command: | + PATH=$PATH:/$HOME/.captain/bin/ ./test.sh + + notify: + webhooks: + - url: 'https://webhook.atomist.com/atomist/circle' diff --git a/Dockerfile b/Dockerfile index fab13fb44..f830e1efe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,13 @@ +# Build stage for Java classes +FROM hbpmip/java-base-build:3.5.0-jdk-8-6 as java-build-env + +COPY pom.xml /project/ +COPY src/ /project/src/ + +# Repeating the file copy works better. I dunno why. +RUN cp /usr/share/maven/ref/settings-docker.xml /root/.m2/settings.xml \ + && mvn clean package + FROM openjdk:8u131-jre-alpine MAINTAINER Mirco Nasuti <mirco.nasuti@chuv.ch> @@ -13,10 +23,10 @@ RUN apk add --no-cache --update ca-certificates wget \ && tar -C /usr/local/bin -xzvf /tmp/dockerize.tar.gz \ && rm -rf /var/cache/apk/* /tmp/* -COPY docker/runner/config/application.tmpl /config/application.tmpl -COPY docker/runner/README.md docker/runner/run.sh / +COPY docker/config/application.tmpl /config/application.tmpl +COPY docker/README.md docker/run.sh / -COPY target/portal-backend.jar backend.jar +COPY --from=java-build-env /project/target/portal-backend.jar /usr/share/jars/ EXPOSE 8080 diff --git a/Dockerfile.builder b/Dockerfile.builder deleted file mode 100644 index 8297a68b8..000000000 --- a/Dockerfile.builder +++ /dev/null @@ -1,17 +0,0 @@ -# Pull base image -FROM maven:3.5.0-jdk-8-alpine - -MAINTAINER mirco.nasuti@chuv.ch - -# Create a user with id 1000, with some luck it should match your user on the host machine. -RUN adduser --quiet --uid 1000 build -USER build - -COPY ./docker/builder/build-in-docker.sh / - -# Volume -VOLUME /build -# Define working directory -WORKDIR /build - -ENTRYPOINT ["/build-in-docker.sh"] diff --git a/captain.yml b/captain.yml index 20d2f6aa6..bc8842887 100644 --- a/captain.yml +++ b/captain.yml @@ -1,18 +1,4 @@ -# Builder image -# Creates a portable environemnt to build this project. -# Do not push this image to Docker hub. -builder: - build: Dockerfile.builder - image: portal-backend-builder - pre: - - echo "Building portal backend builder image" - post: - - echo "Finished building portal backend builder image" - - echo "Building project..." - - docker run --rm -v $WORKSPACE:/build/ -v $HOME/.m2:/home/build/.m2/ portal-backend-builder:latest - - echo "Finished building project" - -portal-backend: +target_image: build: Dockerfile image: hbpmip/portal-backend pre: diff --git a/circle.yml b/circle.yml deleted file mode 100644 index fcb5a4e3b..000000000 --- a/circle.yml +++ /dev/null @@ -1,26 +0,0 @@ -machine: - services: - - docker -dependencies: - cache_directories: - - "~/.m2" - override: - - docker info - - docker build -f Dockerfile.builder -t portal-backend-builder . - - docker run --rm -v $HOME/portal-backend:/build/ -v $HOME/.m2:/home/build/.m2/ portal-backend-builder:latest - - docker build -t hbpmip/portal-backend . -test: - pre: - - ./tests/pre-test-run.sh - override: - - ./tests/test-run.sh -# deployment: -# hub: -# branch: master -# commands: -# - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PASS -e $DOCKER_HUB_EMAIL -# - docker push --branch-tags=false --commit-tags=true -# - mvn sonar:sonar -Dsonar.login=$SONAR_KEY # Need SonarQube back on a public URL -notify: - webhooks: - - url: 'https://webhook.atomist.com/atomist/circle' diff --git a/docker/runner/README.md b/docker/README.md similarity index 100% rename from docker/runner/README.md rename to docker/README.md diff --git a/docker/builder/build-in-docker.sh b/docker/builder/build-in-docker.sh deleted file mode 100755 index 62c479510..000000000 --- a/docker/builder/build-in-docker.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -echo ">>> Building inside Docker" - -echo "Removing old target folder..." -rm -rf target/ - -echo "Packaging..." -mvn package - -echo ">>> Backend build is complete" diff --git a/docker/runner/config/application.tmpl b/docker/config/application.tmpl similarity index 100% rename from docker/runner/config/application.tmpl rename to docker/config/application.tmpl diff --git a/docker/runner/run.sh b/docker/run.sh similarity index 85% rename from docker/runner/run.sh rename to docker/run.sh index 3654d5cbe..2b1ca22d1 100755 --- a/docker/runner/run.sh +++ b/docker/run.sh @@ -10,4 +10,4 @@ fi if [ ! -z "$FEATURES_DB_SERVER" ]; then OPTS="$OPTS -wait tcp://$FEATURES_DB_SERVER -timeout 60s" fi -dockerize $OPTS java -jar backend.jar +dockerize $OPTS java -jar /usr/share/jars/portal-backend.jar -- GitLab