diff --git a/check-dependencies.sh b/check-dependencies.sh index 91dfbb750..abb77d096 100755 --- a/check-dependencies.sh +++ b/check-dependencies.sh @@ -21,4 +21,4 @@ fi mvn clean install -DskipTests -Ddash.skip=false \ --projects '!org.eclipse.hawkbit:hawkbit-repository-test,!org.eclipse.hawkbit:hawkbit-dmf-rabbitmq-test' \ - -Ddash.summary=${DASH_SUMMARY} ${DASH_IP_LAB} \ No newline at end of file + -Ddash.summary=${DASH_SUMMARY} ${DASH_IP_LAB} \ No newline at end of file diff --git a/hawkbit-runtime/docker/dockerfiles/.gitignore b/hawkbit-runtime/docker/dockerfiles/.gitignore deleted file mode 100644 index aacfe85f0..000000000 --- a/hawkbit-runtime/docker/dockerfiles/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -Dockerfile -Dockerfile-mysql diff --git a/hawkbit-runtime/docker/dockerfiles/Dockerfile b/hawkbit-runtime/docker/dockerfiles/Dockerfile new file mode 100644 index 000000000..115e44677 --- /dev/null +++ b/hawkbit-runtime/docker/dockerfiles/Dockerfile @@ -0,0 +1,42 @@ +# set Java +ARG JAVA_VERSION=17.0.9_9 +# extracts spring layers from the app jar (to optimize boot) +FROM eclipse-temurin:${JAVA_VERSION}-jre-alpine as build + +ARG HAWKBIT_APP=hawkbit-update-server +ARG HAWKBIT_VERSION=0.3.0 + +ENV BUILD_DIR=/opt/hawkbit_build +ENV APP=${HAWKBIT_APP} +ENV VERSION=${HAWKBIT_VERSION} + +COPY KEY . + +RUN set -x &&\ + apk add --no-cache --virtual build-dependencies gnupg unzip libressl wget &&\ + gpg --import KEY &&\ + mkdir -p ${BUILD_DIR} &&\ + cd ${BUILD_DIR} &&\ + wget -O ${APP}.jar --no-verbose https://repo1.maven.org/maven2/org/eclipse/hawkbit/${APP}/${VERSION}/${APP}-${VERSION}.jar &&\ + wget -O ${APP}.jar.asc --no-verbose https://repo1.maven.org/maven2/org/eclipse/hawkbit/${APP}/${VERSION}/${APP}-${VERSION}.jar.asc &&\ + gpg --batch --verify ${APP}.jar.asc ${APP}.jar &&\ + apk del build-dependencies &&\ + java -Djarmode=layertools -jar ${APP}.jar extract --destination . &&\ + rm ${APP}.jar ${APP}.jar.asc /KEY + +FROM eclipse-temurin:${JAVA_VERSION}-jre-alpine + +RUN addgroup -S rollouts && adduser -D sp -G rollouts +USER sp + +ENV BUILD_DIR=/opt/hawkbit_build +COPY --from=build ${BUILD_DIR}/dependencies/ ./ +COPY --from=build ${BUILD_DIR}/spring-boot-loader/ ./ +COPY --from=build ${BUILD_DIR}/snapshot-dependencies/ ./ +COPY --from=build ${BUILD_DIR}/application/ ./ + +ARG CONTAINER_PORT=8080 +ENV JAVA_OPTS="-Xms768m -Xmx768m -XX:MaxMetaspaceSize=250m -XX:MetaspaceSize=250m -Xss300K -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError" + +EXPOSE ${CONTAINER_PORT} +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} org.springframework.boot.loader.JarLauncher ${@}"] diff --git a/hawkbit-runtime/docker/dockerfiles/Dockerfile-mysql b/hawkbit-runtime/docker/dockerfiles/Dockerfile-mysql new file mode 100644 index 000000000..b09ef4b99 --- /dev/null +++ b/hawkbit-runtime/docker/dockerfiles/Dockerfile-mysql @@ -0,0 +1,54 @@ +# set Java +ARG JAVA_VERSION=17.0.9_9 +# extracts spring layers from the app jar (to optimize boot) +FROM eclipse-temurin:${JAVA_VERSION}-jre-alpine as build + +ARG HAWKBIT_APP=hawkbit-update-server +ARG HAWKBIT_VERSION=0.3.0 + +ENV BUILD_DIR=/opt/hawkbit_build +ENV APP=${HAWKBIT_APP} +ENV VERSION=${HAWKBIT_VERSION} + +COPY KEY . + +RUN set -x &&\ + apk add --no-cache --virtual build-dependencies gnupg unzip libressl wget &&\ + gpg --import KEY &&\ + mkdir -p ${BUILD_DIR} &&\ + cd ${BUILD_DIR} &&\ + wget -O ${APP}.jar --no-verbose https://repo1.maven.org/maven2/org/eclipse/hawkbit/${APP}/${VERSION}/${APP}-${VERSION}.jar &&\ + wget -O ${APP}.jar.asc --no-verbose https://repo1.maven.org/maven2/org/eclipse/hawkbit/${APP}/${VERSION}/${APP}-${VERSION}.jar.asc &&\ + gpg --batch --verify ${APP}.jar.asc ${APP}.jar &&\ + java -Djarmode=layertools -jar ${APP}.jar extract --destination . &&\ + rm ${APP}.jar ${APP}.jar.asc /KEY + +ARG MARIADB_DRIVER_VERSION=3.1.4 +COPY KEY-mysql . + +RUN set -x &&\ + gpg --import KEY-mysql &&\ + wget -O ${BUILD_DIR}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar --no-verbose https://downloads.mariadb.com/Connectors/java/connector-java-${MARIADB_DRIVER_VERSION}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar &&\ + wget -O ${BUILD_DIR}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar.asc --no-verbose https://downloads.mariadb.com/Connectors/java/connector-java-${MARIADB_DRIVER_VERSION}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar.asc &&\ + gpg --verify --batch ${BUILD_DIR}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar.asc ${BUILD_DIR}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar &&\ + apk del build-dependencies &&\ + rm ${BUILD_DIR}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar.asc /KEY-mysql + +FROM eclipse-temurin:${JAVA_VERSION}-jre-alpine + +RUN addgroup -S rollouts && adduser -D sp -G rollouts +USER sp + +ENV BUILD_DIR=/opt/hawkbit_build +COPY --from=build ${BUILD_DIR}/dependencies/ ./ +COPY --from=build ${BUILD_DIR}/spring-boot-loader/ ./ +COPY --from=build ${BUILD_DIR}/snapshot-dependencies/ ./ +COPY --from=build ${BUILD_DIR}/application/ ./ +ARG MARIADB_DRIVER_VERSION=3.1.4 +COPY --from=build ${BUILD_DIR}/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar/ ./BOOT-INF/lib/ + +ARG CONTAINER_PORT=8080 +ENV JAVA_OPTS="-Dspring.profiles.active=mysql -Xms768m -Xmx768m -XX:MaxMetaspaceSize=250m -XX:MetaspaceSize=250m -Xss300K -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError" + +EXPOSE ${CONTAINER_PORT} +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} org.springframework.boot.loader.JarLauncher ${@}"] diff --git a/hawkbit-runtime/docker/dockerfiles/Dockerfile-mysql.template b/hawkbit-runtime/docker/dockerfiles/Dockerfile-mysql.template deleted file mode 100644 index 26ae5b981..000000000 --- a/hawkbit-runtime/docker/dockerfiles/Dockerfile-mysql.template +++ /dev/null @@ -1,15 +0,0 @@ -FROM hawkbit/hawkbit-update-server:{{HAWKBIT_VERSION}} - -ENV MARIADB_DRIVER_VERSION={{MARIADB_DRIVER_VERSION}} - -COPY KEY-mysql . - -RUN set -x \ - && apk add --no-cache --virtual build-dependencies gnupg unzip libressl wget \ - && gpg --import KEY-mysql \ - && wget -O $HAWKBIT_HOME/mariadb-java-client.jar --no-verbose https://downloads.mariadb.com/Connectors/java/connector-java-$MARIADB_DRIVER_VERSION/mariadb-java-client-$MARIADB_DRIVER_VERSION.jar \ - && wget -O $HAWKBIT_HOME/mariadb-java-client.jar.asc --no-verbose https://downloads.mariadb.com/Connectors/java/connector-java-$MARIADB_DRIVER_VERSION/mariadb-java-client-$MARIADB_DRIVER_VERSION.jar.asc \ - && gpg --verify --batch $HAWKBIT_HOME/mariadb-java-client.jar.asc $HAWKBIT_HOME/mariadb-java-client.jar \ - && apk del build-dependencies - -ENTRYPOINT ["java","-cp","hawkbit-update-server.jar:mariadb-java-client.jar","-Dspring.profiles.active=mysql","-Xms768m","-Xmx768m","-XX:MaxMetaspaceSize=250m","-XX:MetaspaceSize=250m","-Xss300K","-XX:+UseG1GC","-XX:+UseStringDeduplication","-XX:+UseCompressedOops","-XX:+HeapDumpOnOutOfMemoryError","org.springframework.boot.loader.JarLauncher"] diff --git a/hawkbit-runtime/docker/dockerfiles/Dockerfile.template b/hawkbit-runtime/docker/dockerfiles/Dockerfile.template deleted file mode 100644 index a1226f424..000000000 --- a/hawkbit-runtime/docker/dockerfiles/Dockerfile.template +++ /dev/null @@ -1,23 +0,0 @@ -FROM {{BASE_IMAGE}} - -ENV HAWKBIT_VERSION={{HAWKBIT_VERSION}} \ - HAWKBIT_HOME=/opt/hawkbit - -EXPOSE 8080 - -COPY KEY . - -RUN set -x \ - && apk add --no-cache --virtual build-dependencies gnupg unzip libressl wget \ - && gpg --import KEY \ - && mkdir -p $HAWKBIT_HOME \ - && cd $HAWKBIT_HOME \ - && wget -O hawkbit-update-server.jar --no-verbose https://repo1.maven.org/maven2/org/eclipse/hawkbit/hawkbit-update-server/$HAWKBIT_VERSION/hawkbit-update-server-$HAWKBIT_VERSION.jar \ - && wget -O hawkbit-update-server.jar.asc --no-verbose https://repo1.maven.org/maven2/org/eclipse/hawkbit/hawkbit-update-server/$HAWKBIT_VERSION/hawkbit-update-server-$HAWKBIT_VERSION.jar.asc \ - && gpg --batch --verify hawkbit-update-server.jar.asc hawkbit-update-server.jar \ - && apk del build-dependencies - -VOLUME "$HAWKBIT_HOME/artifactrepo" - -WORKDIR $HAWKBIT_HOME -ENTRYPOINT ["java","-jar","hawkbit-update-server.jar","-Xms768m -Xmx768m -XX:MaxMetaspaceSize=250m -XX:MetaspaceSize=250m -Xss300K -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError"] diff --git a/hawkbit-runtime/docker/dockerfiles/README.md b/hawkbit-runtime/docker/dockerfiles/README.md new file mode 100644 index 000000000..21998385b --- /dev/null +++ b/hawkbit-runtime/docker/dockerfiles/README.md @@ -0,0 +1,24 @@ +hawkBit Docker +=== +Build files for both hawkbit docker flavours - standard (no mysql driver) and mysql (with MariaDB Java connector with support for MySQL). + +## Build overview +Images are built using _Dockerfile_ or _Dockerfile-mysql_. They accept _ARG_ build parameters _JAVA_VERSION_, _HAWKBIT_APP_ (by default hawkbit-update-server), HAWKBIT_VERSION_ (by default the last released hawkBit version), _CONTAINER_PORT_ (by default 8080) on which the app opens the http server (if available) and (for mysql flavour only) _MARIADB_DRIVER_VERSION_ (by default 3.1.4 at the time of writing). +Both flavours of are almost the same, just mysql has in addition a MariaDB Java connector and is started, by default, with mysql Spring profile. + +## Build standard +Standard flavour could be build, for example, with: +```shell +docker build --build-arg HAWKBIT_APP=hawkbit-update-server -t hawkbit_update_server:0.3.0 . -f Dockerfile +``` +or just by: +```shell +docker build --build-arg HAWKBIT_APP=hawkbit-update-server -t hawkbit_update_server:0.3.0 . +``` +having that docker uses by default _Dockerfile_. + +## Build mysql +Mysql flavour could be build, for example, with: +```shell +docker build --build-arg HAWKBIT_APP=hawkbit-update-server -t hawkbit_update_server:0.3.0-mysql . -f Dockerfile-mysql +``` \ No newline at end of file diff --git a/hawkbit-runtime/docker/dockerfiles/generate.sh b/hawkbit-runtime/docker/dockerfiles/generate.sh deleted file mode 100755 index 9073e55d8..000000000 --- a/hawkbit-runtime/docker/dockerfiles/generate.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2018 Bosch Software Innovations GmbH and others -# -# This program and the accompanying materials are made -# available under the terms of the Eclipse Public License 2.0 -# which is available at https://www.eclipse.org/legal/epl-2.0/ -# -# SPDX-License-Identifier: EPL-2.0 -# - -set -euxo pipefail - -HAWKBIT_VERSION="0.3.0M9" -MARIADB_DRIVER_VERSION="3.1.4" -BASE_IMAGE="eclipse-temurin:17.0.9_9-jre-alpine" - -################################################## - -# -# rm ./Dockerfile ./Dockerfile-mysql -cp ./Dockerfile.template ./Dockerfile -cp ./Dockerfile-mysql.template ./Dockerfile-mysql - -sed -i '' -e "s/{{BASE_IMAGE}}/${BASE_IMAGE}/g; s/{{HAWKBIT_VERSION}}/$HAWKBIT_VERSION/g" ./Dockerfile -sed -i '' -e "s/{{HAWKBIT_VERSION}}/$HAWKBIT_VERSION/g; s/{{MARIADB_DRIVER_VERSION}}/$MARIADB_DRIVER_VERSION/g" ./Dockerfile-mysql