Skip to content
Snippets Groups Projects
Commit 286da7ee authored by Ludovic Claude's avatar Ludovic Claude
Browse files

Use multistage Docker build

parent 0cdf5787
No related branches found
No related tags found
No related merge requests found
---
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'
# 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
......
# 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"]
# 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:
......
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'
File moved
#!/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"
......@@ -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
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment