Closed paltaa closed 2 months ago
Okay after some time of tinkering, this is the correct Dockerfile that works to build hawkbit with mysql and s3 extension:
ARG JAVA_VERSION=17.0.11_9
FROM eclipse-temurin:${JAVA_VERSION}-jdk-alpine as build
ARG HAWKBIT_APP=hawkbit-update-server
ARG HAWKBIT_VERSION=pass_as_buils_arg
ENV BUILD_DIR=/opt/hawkbit_build
ENV APP=hawkbit-runtime
ENV VERSION=${HAWKBIT_VERSION}
RUN mkdir -p ${BUILD_DIR}/app
RUN apk add --no-cache --virtual build-dependencies gnupg unzip libressl wget git maven
ARG MARIADB_DRIVER_VERSION=2.7.8
RUN 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
RUN 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
## Building hawkbit from source
RUN git clone https://github.com/eclipse/hawkbit.git ${BUILD_DIR}/hawkbit --branch ${HAWKBIT_VERSION}
RUN git clone https://github.com/eclipse/hawkbit-extensions ${BUILD_DIR}/hawkbit/hawkbit-extensions --branch ${HAWKBIT_VERSION}
WORKDIR ${BUILD_DIR}/hawkbit/hawkbit-extensions/hawkbit-extension-artifact-repository-s3
RUN mvn install --batch-mode -DskipTests -T $(nproc) -Dmaven.artifact.threads=$(nproc)
WORKDIR ${BUILD_DIR}/hawkbit
RUN cp ./hawkbit-extensions/hawkbit-extension-artifact-repository-s3/target/hawkbit-extension-artifact-repository-s3-*.jar ${BUILD_DIR}/hawkbit/hawkbit-runtime/hawkbit-update-server/src/main/resources/
ARG HAWKBIT_EXTRA_DEPENDENCIES_S3="\n\
<!-- Extension for using S3 as artifact storage. -->\n\
<dependency>\n\
<groupId>org.eclipse.hawkbit</groupId>\n\
<artifactId>hawkbit-extension-artifact-repository-s3</artifactId>\n\
<version>\${project.version}</version>\n\
</dependency>"
RUN sed -i "s|<dependencies>|<dependencies>${HAWKBIT_EXTRA_DEPENDENCIES_S3}|" hawkbit-runtime/hawkbit-update-server/pom.xml
RUN mvn versions:set -DnewVersion=${HAWKBIT_VERSION}
RUN mvn clean install -DskipTests --debug -Dspring.profiles.active=custom,mysql -Daws.region=us-east-1 -T $(nproc) -Dmaven.artifact.threads=$(nproc)
ENV HAWKBIT_JAR=${BUILD_DIR}/hawkbit/hawkbit-runtime/hawkbit-update-server/target/hawkbit-update-server-${HAWKBIT_VERSION}.jar
RUN java -Djarmode=layertools -jar ${HAWKBIT_JAR} extract --destination ${BUILD_DIR}
FROM eclipse-temurin:${JAVA_VERSION}-jre-alpine
ARG MARIADB_DRIVER_VERSION=2.7.8
ARG HAWKBIT_VERSION=pass_as_buils_arg
ENV HAWKBIT_JAR=/opt/hawkbit_build/hawkbit/hawkbit-runtime/hawkbit-update-server/target/hawkbit-update-server-${HAWKBIT_VERSION}.jar
RUN addgroup -S hawkbit_group && adduser -D hawkbit -G hawkbit_group
RUN mkdir -p /artifactrepo && chown -R hawkbit /artifactrepo
USER hawkbit
ENV BUILD_DIR=/opt/hawkbit_build
WORKDIR /opt/hawkbit
COPY --from=build /opt/hawkbit_build/mariadb-java-client-${MARIADB_DRIVER_VERSION}.jar ./BOOT-INF/lib/
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/ .
# COPY --from=build ${HAWKBIT_JAR} /opt/hawkbit
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"
VOLUME "/artifactrepo"
EXPOSE ${CONTAINER_PORT}
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} org.springframework.boot.loader.JarLauncher ${@}"]
This is the command to build for macos arm:
docker build --build-arg HAWKBIT_VERSION=${HAWKBIT_VERSION} -t (YOUR_IMAGE_REPO):${HAWKBIT_VERSION} . --platform=linux/amd64
Hope this helps someone in the future
I've been trying for a few days to build hawkbit version
3.0.0M8
with the s3 artifacts extension, this is my Dockerfile:Installing the Kubernets helm chart with the oficial
eclipse-iot
packages repo, these are the values:And finally the custom pom file where i added the s3 dependencies but when i run it it seems that its just not there and im getting errors trying to upload files after disabling fileStorage:
Any ideas on what im missing in order to get the s3 artifact extension working in Kubernetes?
Thanks