From 4ad2b5641b5d410f921b568db3e2498b078d9b3f Mon Sep 17 00:00:00 2001 From: Hai Liang Wang Date: Mon, 26 Dec 2022 13:04:30 +0800 Subject: [PATCH] https://github.com/cskefu/cskefu/issues/775 enable build docker container for cskefu serving api Signed-off-by: Hai Liang Wang --- server/serving-api/Dockerfile | 35 ++++++++------- .../serving-api/assets/docker-entrypoint.sh | 22 ++++++++++ server/serving-api/bin/build.sh | 44 +++++++++++++++++++ server/serving-api/bin/package.sh | 20 +++++++++ server/serving-api/pom.xml | 1 + .../src/main/resources/application.properties | 1 + 6 files changed, 108 insertions(+), 15 deletions(-) create mode 100644 server/serving-api/assets/docker-entrypoint.sh create mode 100644 server/serving-api/bin/build.sh create mode 100644 server/serving-api/bin/package.sh diff --git a/server/serving-api/Dockerfile b/server/serving-api/Dockerfile index d74ea5a1..27352a9f 100644 --- a/server/serving-api/Dockerfile +++ b/server/serving-api/Dockerfile @@ -1,20 +1,25 @@ -FROM adoptopenjdk/openjdk15:jdk-15.0.1_9-alpine-slim as build -WORKDIR /workspace/app -COPY target/core*.jar /workspace/app -RUN mkdir -p /workspace/app/dependency && (cd /workspace/app/dependency; jar -xf ../*.jar) +FROM chatopera/java:17 +MAINTAINER Hai Liang Wang +# base image is built with config/base/build.sh -FROM adoptopenjdk/openjdk15:jdk-15.0.1_9-alpine-slim -VOLUME /tmp +ARG DEBIAN_FRONTEND=noninteractive +ARG VCS_REF +ARG APPLICATION_CUSTOMER_ENTITY +ARG APPLICATION_BUILD_DATESTR -ARG DEPENDENCY=/workspace/app/dependency -RUN addgroup --system app_group && adduser --system app_user --ingroup app_group --home /app -COPY --from=build --chown=app_user ${DEPENDENCY}/BOOT-INF/lib /app/lib -COPY --from=build --chown=app_user ${DEPENDENCY}/META-INF /app/META-INF -COPY --chown=app_user target/internal-bundles /app/internal-bundles -COPY --from=build --chown=app_user ${DEPENDENCY}/BOOT-INF/classes /app +ENV APPLICATION_CUSTOMER_ENTITY=$APPLICATION_CUSTOMER_ENTITY +ENV APPLICATION_BUILD_DATESTR=$APPLICATION_BUILD_DATESTR -USER app_user:app_group -WORKDIR /app +LABEL org.label-schema.vcs-ref=$VCS_REF \ + org.label-schema.vcs-url="https://github.com/cskefu/cskefu" -ENTRYPOINT ["java","-cp","./:lib/*","com.cskefu.serving.api.SampleApplication"] +RUN rm -rf /opt/cskefu && mkdir /opt/cskefu +COPY ./target/serving-api.jar /opt/cskefu/serving-api.jar +COPY ./target/internal-bundles /opt/cskefu/internal-bundles +COPY ./assets/*.sh /opt/cskefu +RUN chmod +x /opt/cskefu/*.sh + +WORKDIR /opt/cskefu +EXPOSE 6500-6700 +CMD ["./docker-entrypoint.sh"] diff --git a/server/serving-api/assets/docker-entrypoint.sh b/server/serving-api/assets/docker-entrypoint.sh new file mode 100644 index 00000000..d8bf4d29 --- /dev/null +++ b/server/serving-api/assets/docker-entrypoint.sh @@ -0,0 +1,22 @@ +#! /bin/bash +########################################### +# Contact Center Start +########################################### + +# constants +baseDir=$(cd `dirname "$0"`;pwd) + +# functions + +# main +[ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return +cd $baseDir + +# TODO, setup db or upgrade db + +if [ $? -eq 0 ]; then + java -jar serving-api.jar +else + echo "Fail to resolve mysql database instance." + exit 1 +fi diff --git a/server/serving-api/bin/build.sh b/server/serving-api/bin/build.sh new file mode 100644 index 00000000..25e68c01 --- /dev/null +++ b/server/serving-api/bin/build.sh @@ -0,0 +1,44 @@ +#! /bin/bash +########################################### +# +########################################### + +# constants +baseDir=$(cd `dirname "$0"`;pwd) +appHome=$baseDir/.. +registryPrefix= +imagename=cskefu/contact-center + +# functions + +# main +[ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return +# build +cd $appHome +if [ -d ../private ]; then + registryPrefix=dockerhub.qingcloud.com/ +fi + +TIMESTAMP=`date "+%Y%m%d.%H%M%S"` +PACKAGE_VERSION=`git rev-parse --short HEAD` +APPLICATION_CUSTOMER_ENTITY=${APPLICATION_CUSTOMER_ENTITY:-"OpenSource Community"} + +$baseDir/package.sh + +if [ ! $? -eq 0 ]; then + exit 1 +fi + +set -x +docker build --build-arg VCS_REF=$PACKAGE_VERSION \ + --build-arg APPLICATION_BUILD_DATESTR=$TIMESTAMP \ + --build-arg APPLICATION_CUSTOMER_ENTITY="$APPLICATION_CUSTOMER_ENTITY" \ + --no-cache \ + --force-rm=true --tag $registryPrefix$imagename:$PACKAGE_VERSION . + +if [ $? -eq 0 ]; then + docker tag $registryPrefix$imagename:$PACKAGE_VERSION $registryPrefix$imagename:v8 +else + echo "Build contact-center failure." + exit 1 +fi \ No newline at end of file diff --git a/server/serving-api/bin/package.sh b/server/serving-api/bin/package.sh new file mode 100644 index 00000000..43043822 --- /dev/null +++ b/server/serving-api/bin/package.sh @@ -0,0 +1,20 @@ +#! /bin/bash +########################################### +# +########################################### + +# constants +baseDir=$(cd `dirname "$0"`;pwd) +cwdDir=$PWD +export PYTHONUNBUFFERED=1 +export PATH=/opt/miniconda3/envs/venv-py3/bin:$PATH +export TS=$(date +%Y%m%d%H%M%S) +export DATE=`date "+%Y%m%d"` +export DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too + +# functions + +# main +[ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return +cd $baseDir/.. +mvn -DskipTests clean package diff --git a/server/serving-api/pom.xml b/server/serving-api/pom.xml index c5ec67ea..ce926b13 100644 --- a/server/serving-api/pom.xml +++ b/server/serving-api/pom.xml @@ -25,6 +25,7 @@ + serving-api org.springframework.boot diff --git a/server/serving-api/src/main/resources/application.properties b/server/serving-api/src/main/resources/application.properties index e93ef522..64814e85 100644 --- a/server/serving-api/src/main/resources/application.properties +++ b/server/serving-api/src/main/resources/application.properties @@ -19,4 +19,5 @@ plugins.config.felix.fileinstall.bundles.updateWithListeners=true plugins.config.org.osgi.framework.system.packages.extra=org.osgi.framework,org.xml.sax,org.xml.sax.helpers,javax.xml.parsers,javax.naming plugins.config.auto.exported.packages=com.cskefu.mod.plugin,org.slf4j +server.port=6500 server.servlet.context-path=/api