Merge "Portal Spring Boot Development"
[portal.git] / deliveries / build_portalapps_dockers.sh
index a45e55c..fdaf9a1 100755 (executable)
 #!/bin/bash
-# Builds Portal, Portal-SDK and DMaaP-BC webapps;
-# then packages all into a docker.
-# Prereq: all three projects have been cloned from git.
+# Builds Portal and Portal-SDK webapps; packages all into a docker.
+# Prereq: all projects have been cloned from git.
 # Expects to be invoked with CWD=portal/deliveries
 # Caches files in local directory for docker build.
 
 # Stop on error; show output
 set -e -x
 
-# For debugging only bcox the FE build takes a long time
-SKIPFE=N
-if [ $# -gt 0 -a "$1" == "skipfe" ] ; then
-    echo "Skipping Portal-FE build step"
-    SKIPFE=Y
+# This reuses the docker-compose environment file
+echo "Set image tag name variables"
+source $(dirname $0)/.env
+if [ $1 ]; then
+  echo "Sourcing extra parameters from $1"
+  source $(dirname $0)/$1
+else
+  echo "Using only base parameters from .env"
 fi
 
-# Establish environment variables
-echo "Set variables"
-source $(dirname $0)/os_settings.sh
+# Check for Jenkins build number
+if [ -n "$BUILD_NUMBER" ]; then
+    echo "Using Jenkins build number $BUILD_NUMBER; Docker Tag $PORTAL_TAG"
+else
+    # This indicates a non-Jenkins build
+    export BUILD_NUMBER="999"
+    echo "Using Default build number $BUILD_NUMBER; Docker Tag $PORTAL_TAG"
+    
+fi
 
-# Work standalone AND in the ONAP Jenkins.
+# Must work when called by ONAP Jenkins AND local builds.
 # Pick up Jenkins settings for this script.
 # Use -B for batch operation to skip download progress output
 if [ -n "$MVN" ]; then
-    export MVN="${MVN} -B -gs ${GLOBAL_SETTINGS_FILE} -s ${SETTINGS_FILE}"
+    export MVN="${MVN} -B -gs ${GLOBAL_SETTINGS_FILE} -s ${SETTINGS_FILE} -Dbuild.number=$BUILD_NUMBER"
 else
-    MVN=mvn
+    # Force refresh of snapshots
+    MVN="mvn -B -U -Dbuild.number=$BUILD_NUMBER"
 fi
 
 # This expects to start in the deliveries folder; make sure
-DOCKERFILE=Dockerfile.portalapps
-if [ ! -f $DOCKERFILE ] ; then
-    echo "Failed to find expected file; must start in deliveries folder"
+if [ "$PORTAL_DOCKERFILE" != "skip"] && [ ! -f $PORTAL_DOCKERFILE ] ; then
+    echo "Failed to find file ${PORTAL_DOCKERFILE}; must start in deliveries folder; exiting"
     exit 1
 fi
 
-# Establish directories and variables
-DELIV="$(pwd)"
+# Store directory names as variables
+# This is the deliveries area.
+DELIVDIR="$(pwd)"
+# parent directory, for finding source projects
+cd ..
+BASEDIR="$(pwd)"
+cd $DELIVDIR
+
 # Relative path of temp directory
-BUILD="build"
+BUILD_REL="build"
 # Absolute path of temp directory
-OUT=$DELIV/$BUILD
-if [ $SKIPFE == "Y" ]; then
-    echo "Skipping clean/recreate of $OUT"
+BUILD_ABS=$DELIVDIR/$BUILD_REL
+
+# Build Java projects.
+# (use env var toskip when debugging Docker build problems)
+if [ "$SKIP_JAVA_BUILD" = "please" ]; then
+
+       echo "SKIPPING JAVA BUILD!"
+
 else
-    rm -fr $OUT
-    mkdir $OUT
+       echo "Starting Java build."
+
+       # Clean out and recreate
+       rm -fr $BUILD_REL
+       mkdir $BUILD_REL
+
+       echo "Build jar and war files"
+       cd $BASEDIR
+       ${MVN} ${MVN_EXTRA_PORTAL} clean install
+
+        if [ "$SDK_DOCKERFILE" != "skip" ] && [ "SDK_APP_DIR" != "skip" ]; then
+         echo "Build Portal-SDK app"
+         cd $BASEDIR/$SDK_APP_DIR
+         ${MVN} ${MVN_EXTRA_SDK} clean package
+       fi
+
+       echo "Java build complete."
 fi
-# parent directory
-cd ..
-BASE="$(pwd)"
-
-# Copy DDL/DML to required directories (old scripts use long path /PROJECT/...)
-cd $DELIV
-rm -fr PROJECT
-# copy over DB scripts for the dockerfiles
-# forgive the ugly trick with the .. at end.
-mkdir -p ${SCRIPT_COMMON_DIR}     && cp -r $BASE/ecomp-portal-DB-common ${SCRIPT_COMMON_DIR}/..
-mkdir -p ${SCRIPT_DIR}            && cp -r $BASE/ecomp-portal-DB-os ${SCRIPT_DIR}/..
-mkdir -p ${SDK_COMMON_SCRIPT_DIR} && cp -r $BASE/sdk/ecomp-sdk/epsdk-app-common/db-scripts ${SDK_COMMON_SCRIPT_DIR}/..
-mkdir -p ${SDK_SCRIPT_DIR}        && cp -r $BASE/sdk/ecomp-sdk/epsdk-app-os/db-scripts ${SDK_SCRIPT_DIR}/..
-# Build complete database script for DBC
-DBCA_OPEN_SD=$BASE/dmaapbc/dcae_dmaapbc_webapp/dbca-os/db-scripts
-DBCA_COMM_SD=$BASE/dmaapbc/dcae_dmaapbc_webapp/dbca-common/db-scripts
-# Old scripts expect this path
-mkdir -p $DBC_SCRIPT_DIR
-cat $DBCA_OPEN_SD/dbca-create-mysql-1707-os.sql $DBCA_COMM_SD/dbca-ddl-mysql-1707-common.sql $DBCA_OPEN_SD/dbca-dml-mysql-1707-os.sql > $DBC_SCRIPT_DIR/dbca-complete-mysql-1707-os.sql
-
-cd $BASE/ecomp-portal-BE-common
-${MVN} clean install
-
-cd $BASE/ecomp-portal-BE-os
-${MVN} clean package
-cp target/ecompportal-be-os.war $OUT
-
-cd $BASE/ecomp-portal-FE-os/
-if [ $SKIPFE == "Y" ]; then
-    echo "Skipping MVN in $(pwd)"
-else
-    ${MVN} clean package
-    cp -r dist/public $OUT
+
+if [ "$BE_DOCKERFILE" != "skip" ] || [ "PORTAL_DOCKERFILE" != "skip" ]; then
+  echo "Copy Portal app BE"
+  cp $BASEDIR/$BE_WAR_DIR/$BE_WAR_FILE $BUILD_ABS
 fi
 
-cd $BASE/sdk/ecomp-sdk/epsdk-app-os
-${MVN} clean package
-cp target/epsdk-app-os.war $OUT
+if [ "$FE_DOCKERFILE" != "skip" ] || [ "PORTAL_DOCKERFILE" != "skip" ]; then
+  echo "Copy Portal app FE"
+  cp -r $BASEDIR/$FE_DIR $BUILD_ABS
+fi
+
+if [ "$WMS_DOCKERFILE" != "skip" ]; then
+  echo "Copy Portal widget-ms"
+  cp $BASEDIR/$WIDGET_MS_JAR_DIR/$WIDGET_MS_JAR_FILE $BUILD_ABS
+fi
+
+if [ "$SDK_DOCKERFILE" != "skip" ] && [ "SDK_APP_DIR" != "skip" ]; then
+  echo "Copy Portal-SDK app build results"
+  cp $BASEDIR/$SDK_WAR_DIR/$SDK_WAR_FILE $BUILD_ABS
+fi
 
-cd $BASE/dmaapbc/dcae_dmaapbc_webapp
-${MVN} clean package
-cp dbca-os/target/dmaap-bc-app-os.war $OUT
+# Build Docker images
 
 PROXY_ARGS=""
 if [ $HTTP_PROXY ]; then
@@ -98,19 +112,111 @@ if [ $HTTPS_PROXY ]; then
     PROXY_ARGS+=" --build-arg HTTPS_PROXY=${HTTPS_PROXY}"
 fi
 
-# build portal docker
-cd $DELIV
-PORTAL_DOCKER_CMD="
-       docker build -t ${EP_IMG_NAME} ${PROXY_ARGS}
-       --build-arg FE_DIR=$BUILD/public
-       --build-arg PORTAL_WAR=$BUILD/ecompportal-be-os.war
-       --build-arg SDK_WAR=$BUILD/epsdk-app-os.war
-       --build-arg DBC_WAR=$BUILD/dmaap-bc-app-os.war
-       -f $DOCKERFILE .
-"
-echo "Invoking portal docker build"
-$PORTAL_DOCKER_CMD
-
-# Build widget-ms docker
-cd $BASE/ecomp-portal-widget-ms
-${MVN} package docker:build
+# must work in delivery directory
+cd $DELIVDIR
+
+if [ "$DB_DOCKERFILE" = "skip" ]; then 
+  echo "SKIPPING DB DOCKER BUILD!"
+else 
+# Copy DDL/DML to required directories
+# RELATIVE PATHS to local directories with database scripts
+# bcos Docker looks within this build area only
+  DB_SCRIPT_DIR=$BUILD_REL/db-scripts
+  mkdir -p ${DELIVDIR}/${DB_SCRIPT_DIR}
+# Portal
+  cp $BASEDIR/ecomp-portal-DB-common/*.sql ${DB_SCRIPT_DIR}
+  cp $BASEDIR/ecomp-portal-DB-os/*.sql ${DB_SCRIPT_DIR}
+# SDK app
+  cp $BASEDIR/sdk/ecomp-sdk/epsdk-app-common/db-scripts/*.sql ${DB_SCRIPT_DIR}
+  cp $BASEDIR/sdk/ecomp-sdk/epsdk-app-os/db-scripts/*.sql ${DB_SCRIPT_DIR}
+
+  echo "Build mariadb docker image"
+  DB_DOCKER_CMD="
+    docker build -t ${DB_IMG_NAME}:${PORTAL_TAG} ${PROXY_ARGS}
+      --build-arg DB_SCRIPT_DIR=${DB_SCRIPT_DIR}
+      -f $DB_DOCKERFILE .
+  "
+  $DB_DOCKER_CMD
+fi
+
+# Copy cassandra scripts to required directories
+# Portal
+#cp $BASEDIR/ecomp-portal-DB-common/*.cql ${DELIVDIR}
+# SDK app
+#cp $BASEDIR/sdk/ecomp-sdk/epsdk-app-common/db-scripts/*.cql ${DELIVDIR}
+
+# Build Docker Images
+
+#Combined FE/BE image
+if [ "$PORTAL_DOCKERFILE" = "skip" ]; then
+  echo "SKIPPING PORTAL DOCKER IMAGE BUILD!"
+else
+  echo "Build portal docker image"
+  PORTAL_DOCKER_CMD="
+    docker build -t ${EP_IMG_NAME}:${PORTAL_TAG} ${PROXY_ARGS}
+      --build-arg FE_DIR=$BUILD_REL/public
+      --build-arg PORTAL_WAR=$BUILD_REL/$BE_WAR_FILE
+      --build-arg SERVERXML=${SERVER_XML_DIR}/server.xml
+      --build-arg PORTALCONTEXT=$PORTALCONTEXT
+      -f $PORTAL_DOCKERFILE .
+  "
+  $PORTAL_DOCKER_CMD
+fi
+
+if [ "$SDK_DOCKERFILE" = "skip" ]; then
+  echo "SKIPPING SDK DOCKER IMAGE BUILD!"
+else
+  echo "Build sdk demo app docker image"
+  SDK_DOCKER_CMD="
+    docker build -t ${SDK_IMG_NAME}:${PORTAL_TAG} ${PROXY_ARGS}
+      --build-arg SDK_WAR=$BUILD_REL/$SDK_WAR_FILE
+      --build-arg SDKCONTEXT=$SDKCONTEXT
+      -f $SDK_DOCKERFILE .
+  "
+  $SDK_DOCKER_CMD
+fi
+
+if [ "$BE_DOCKERFILE" = "skip" ]; then
+  echo "SKIPPING BE DOCKER IMAGE BUILD!"
+else 
+  echo "Build portal be image"
+  BE_DOCKER_CMD="
+    docker build -t ${BE_IMG_NAME}:${PORTAL_TAG} ${PROXY_ARGS}
+      --build-arg PORTAL_WAR=$BUILD_REL/$BE_WAR_FILE
+      --build-arg SERVERXML=${SERVER_XML_DIR}/server.xml
+      --build-arg PORTALCONTEXT=$PORTALCONTEXT
+      --build-arg BE_BASE_IMAGE=$BE_BASE_IMAGE
+      -f $BE_DOCKERFILE .
+  "
+  $BE_DOCKER_CMD
+fi
+
+if [ "$FE_DOCKERFILE" = "skip" ]; then
+  echo "SKIPPING FE DOCKER IMAGE BUILD!"
+else 
+  echo "Build portal fe image"
+  FE_DOCKER_CMD="
+    docker build -t ${FE_IMG_NAME}:${PORTAL_TAG} ${PROXY_ARGS}
+      --build-arg FE_DIR=$BUILD_REL/public
+      --build-arg FECONTEXT=$FECONTEXT
+      --build-arg FE_BASE_IMAGE=$FE_BASE_IMAGE
+      -f $FE_DOCKERFILE .
+  "
+  $FE_DOCKER_CMD
+fi
+
+if [ "$WMS_DOCKERFILE" = "skip" ]; then
+  echo "SKIPPING WIDGET-MS DOCKER IMAGE BUILD!"
+else
+  echo "Build widget-ms docker image"
+  WMS_DOCKER_CMD="
+    docker build -t ${WMS_IMG_NAME}:${PORTAL_TAG} ${PROXY_ARGS}
+      --build-arg WMS_JAR=$BUILD_REL/$WIDGET_MS_JAR_FILE
+      -f Dockerfile.widgetms .
+  "
+  $WMS_DOCKER_CMD
+fi
+
+# For ease of debugging, leave the build dir
+# echo "Cleaning up"
+# rm -fr $BUILD_REL