From 881a26c5e7aca04b572f2cceebfab0f92cc9dcfd Mon Sep 17 00:00:00 2001 From: Alfredo Oliviero Date: Wed, 8 May 2024 17:52:16 +0200 Subject: [PATCH] push on harbor and docker --- Dockerfile | 18 ++++--- buildImageAndStart.sh | 114 ++++++++++++++++++++++++++++++++++-------- loginHarborHub.sh | 13 +++++ 3 files changed, 117 insertions(+), 28 deletions(-) create mode 100755 loginHarborHub.sh diff --git a/Dockerfile b/Dockerfile index 6ee50ff..6a2257a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,14 @@ ARG JAVA_VERSION=11 -FROM d4science/smartgears-distribution:4.0.0-SNAPSHOT-java$JAVA_VERSION-tomcat10.1.19 -#FROM smartgears-distribution:4.0.0-SNAPSHOT-java$JAVA_VERSION-tomcat10.1.19 +ARG SMARTGEARS_VERSION=4.0.0-SNAPSHOT -COPY ./docker/logback.xml /etc/ -COPY ./docker/container.ini /etc/ -COPY ./docker/*.gcubekey /tomcat/lib -COPY ./target/idm-service.war /tomcat/webapps/ +#FROM d4science/smartgears-distribution:${SMARTGEARS_VERSION}-java${JAVA_VERSION}-tomcat10.1.19 +FROM hub.dev.d4science.org/gcube/smartgears-distribution:${SMARTGEARS_VERSION}-java${JAVA_VERSION}-tomcat10.1.19 + #FROM smartgears-distribution:4.0.0-SNAPSHOT-java$JAVA_VERSION-tomcat10.1.19 + ARG CONTAINER_INI="./docker/container.ini" -EXPOSE 8080 + COPY ./docker/logback.xml /etc/ + COPY ${CONTAINER_INI} /etc/container.ini + COPY ./docker/*.gcubekey /tomcat/lib + COPY ./target/idm-service.war /tomcat/webapps/ + + EXPOSE 8080 diff --git a/buildImageAndStart.sh b/buildImageAndStart.sh index 2c52cc3..48b72d7 100755 --- a/buildImageAndStart.sh +++ b/buildImageAndStart.sh @@ -1,13 +1,30 @@ #!/bin/bash -accepted_java_versions=(11 17) +# set -x # uncomment to debug script + +ACCEPTED_JAVA_VERSIONs=(11 17) NAME=idm-service +BUILD_VERSION=0.0.1-SNAPSHOT +SMARTGEARS_VERSION=4.0.1-SNAPSHOT +CONTAINER_INI="./docker/container.ini" +IMAGE_VERSION=${BUILD_VERSION}-java${JAVA_VERSION}-smartgears${SMARTGEARS_VERSION} + PORT=8080 DEBUG_PORT=5005 DEBUG=false +EXECUTE=false +TEST=false COMPILE=true -java_version=11 +JAVA_VERSION=11 + +PUSH_DOCKER=false +PUSH_HARBOR=false +LOGIN_HARBOR=false + +BUILD_NAME=$NAME:$IMAGE_VERSION + +echo "BUILD_NAME=$BUILD_NAME" ################################################################################ # Help # @@ -18,14 +35,20 @@ Help() { echo echo "Syntax: buildDistribution [-n arg] [-p arg] [-j arg] [-d arg?] [-h]" echo "options:" - echo "-s skip maven package" - echo "-n arg specifies the docker image name (default is identity-manager)." - echo "-p arg specifies the port to be exposed for the docker container to access the service (default $PORT)" - echo "-j arg specify java version (default is $java_version)" - echo " accepted version are: ${accepted_java_versions[@]}" - echo "-d arg? enable java debug mode" - echo " arg is the debug port (default is $DEBUG_PORT)" - echo "-h Print this Help." + echo "-s skip maven package" + echo "-t exec also maven tests" + echo "-n arg specifies the docker image name (default is identity-manager)." + echo "-p arg specifies the port to be exposed for the docker container to access the service (default $PORT)" + echo "-j arg specify java version (default is $JAVA_VERSION)" + echo " accepted version are: ${ACCEPTED_JAVA_VERSIONs[@]}" + echo "-e execute the image" + echo "-d arg? enable java debug mode for execution" + echo " arg is the debug port (default is $DEBUG_PORT)" + echo "-r push image to d4science harbo[r] (with login already done, or -l to login)" + echo "-l [l]ogin to d4science harbor" + echo "-u p[u]sh image to dockerhub (with docker login already done)" + echo "-c arg path of the file to deploy as container.ini (default ./docker/container.ini)" + echo "-h Print this Help." echo } @@ -37,28 +60,42 @@ Help() { set -e -OPTSTRING=":sn:p:d:j:?h" +OPTSTRING=":slmurn:p:c:ed:j:?h" while getopts $OPTSTRING opt; do # echo "Option -${opt} was triggered, Argument: ${OPTARG}" case "${opt}" in s) COMPILE=false && echo "compile $COMPILE" ;; + c) + CONTAINER_INI=${OPTARG} + echo "CONTAINER_INI: $CONTAINER_INI";; + m) MULTI_PLATFORM=true ;; n) NAME=${OPTARG} ;; p) PORT=${OPTARG} ;; + + u) PUSH_DOCKER=true ;; + l) LOGIN_HARBOR=true ;; + r) PUSH_HARBOR=true ;; + + t) TEST=true ;; + e) EXECUTE=true ;; d) + EXECUTE=true DEBUG=true DEBUG_PORT=${OPTARG} echo "debug enabled, port $DEBUG_PORT" ;; j) - if [[ ${accepted_java_versions[@]} =~ ${OPTARG} ]]; then - java_version=${OPTARG} + if [[ ${ACCEPTED_JAVA_VERSIONs[@]} =~ ${OPTARG} ]]; then + JAVA_VERSION=${OPTARG} else - echo "Invalid java version" && echo "accepted version are: ${accepted_java_versions[@]}" && exit 1 + echo "Invalid java version" && echo "accepted version are: ${ACCEPTED_JAVA_VERSIONs[@]}" && exit 1 fi ;; h) Help && exit 0 ;; - :) # matched when an option that is expected to have an argument is passed without one + + # matched when an option that is expected to have an argument is passed without one + :) if [ ${OPTARG} = "d" ]; then DEBUG=true echo "debug enabled, port $DEBUG_PORT" @@ -76,15 +113,50 @@ while getopts $OPTSTRING opt; do done if [ $COMPILE = true ]; then - mvn clean package + if [ $TEST = false ]; then + mvn clean package -Dmaven.test.skip + else + mvn clean package + fi else echo "skipping mvn package" fi -docker build -t $NAME --build-arg JAVA_VERSION=${java_version} . - -if [ $DEBUG = false ]; then - docker run -p $PORT:8080 $NAME +if [ -z $MULTI_PLATFORM ]; then + docker build -t $BUILD_NAME --build-arg="CONTAINER_INI=$CONTAINER_INI" --build-arg="JAVA_VERSION=${JAVA_VERSION}" --build-arg="SMARTGEARS_VERSION=${SMARTGEARS_VERSION}" . else - docker run -p $PORT:8080 -p $DEBUG_PORT:5005 -e JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=*:5005,server=y,suspend=y" $NAME + docker build -t $BUILD_NAME --build-arg="CONTAINER_INI=$CONTAINER_INI" --build-arg="JAVA_VERSION=${JAVA_VERSION}" --build-arg="SMARTGEARS_VERSION=${SMARTGEARS_VERSION}" --platform=linux/amd64,linux/arm64,linux/arm/v7 . + + # docker manifest create hub.dev.d4science.org/gcube/$BUILD_NAME \ + # hub.dev.d4science.org/gcube/$NAME-amd64-linux:$IMAGE_VERSION \ + # hub.dev.d4science.org/gcube/$NAME-arm-linux:$IMAGE_VERSION \ + # hub.dev.d4science.org/gcube/$NAME-arm-linux:$IMAGE_VERSION +fi + +if [ ${PUSH_DOCKER} = true ]; then + DOCKER_NAME=d4science/$BUILD_NAME + docker tag $BUILD_NAME $DOCKER_NAME + docker push $DOCKER_NAME + echo ">>> pushed on dockerhub the image $DOCKER_NAME" +fi + +if [ ${LOGIN_HARBOR} = true ]; then + ./loginHarborHub.sh +fi + +if [ $PUSH_HARBOR = true ]; then + HARBOR_NAME=hub.dev.d4science.org/gcube/$BUILD_NAME + echo ">>> PUSHING on hub.dev.d4science.org the image $HARBOR_NAME" + + docker tag $BUILD_NAME $HARBOR_NAME + docker push $HARBOR_NAME + echo ">>> pushed on hub.dev.d4science.org the image $HARBOR_NAME" +fi + +if [ $EXECUTE = true ]; then + if [ $DEBUG = true ]; then + docker run -p $PORT:8080 -p $DEBUG_PORT:5005 -e JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=*:5005,server=y,suspend=y" $BUILD_NAME + else + docker run -p $PORT:8080 $BUILD_NAME + fi fi diff --git a/loginHarborHub.sh b/loginHarborHub.sh new file mode 100755 index 0000000..48a84cd --- /dev/null +++ b/loginHarborHub.sh @@ -0,0 +1,13 @@ +#!/bin/bash +REGISTRY_URL="hub.dev.d4science.org" +#USERNAME="alfredo.oliviero" +echo "to obtain Harbor username and CLI secret:" +echo "https://hub.dev.d4science.org/ -> user profile -> CLI secret" + +read -p "username:" USERNAME + +echo "" + +read -s -p "CLI secret:" ACCESS_TOKEN +echo "$ACCESS_TOKEN" | docker login $REGISTRY_URL -u $USERNAME --password-stdin +unset ACCESS_TOKEN