2a09997c8396ddd6b9e3d783b78419c65572ead7
[portal.git] / deliveries / build_portalapps_dockers.sh
1 #!/bin/bash
2 # Builds Portal and Portal-SDK webapps; packages all into a docker.
3 # Prereq: all projects have been cloned from git.
4 # Expects to be invoked with CWD=portal/deliveries
5 # Caches files in local directory for docker build.
6
7 # Stop on error; show output
8 set -e -x
9
10 # This reuses the docker-compose environment file
11 echo "Set image tag name variables"
12 source $(dirname $0)/.env
13 if [ $1 ]; then
14   echo "Sourcing extra parameters from $1"
15   source $(dirname $0)/$1
16 else
17   echo "Using only base parameters from .env"
18 fi
19
20 # Check for Jenkins build number
21 if [ -n "$BUILD_NUMBER" ]; then
22     export PORTAL_TAG=$BUILD_NUMBER
23     echo "Using Jenkins build number $BUILD_NUMBER; Docker Tag $PORTAL_TAG"
24 else
25     # This indicates a non-Jenkins build
26     export BUILD_NUMBER="999"
27     echo "Using Default build number $BUILD_NUMBER; Docker Tag $PORTAL_TAG"
28     
29 fi
30
31 # Must work when called by ONAP Jenkins AND local builds.
32 # Pick up Jenkins settings for this script.
33 # Use -B for batch operation to skip download progress output
34 if [ -n "$MVN" ]; then
35     export MVN="${MVN} -B -gs ${GLOBAL_SETTINGS_FILE} -s ${SETTINGS_FILE} -Dbuild.number=$BUILD_NUMBER"
36 else
37     # Force refresh of snapshots
38     MVN="mvn -B -U -Dbuild.number=$BUILD_NUMBER"
39 fi
40
41 # This expects to start in the deliveries folder; make sure
42 if [ "$PORTAL_DOCKERFILE" != "skip"] && [ ! -f $PORTAL_DOCKERFILE ] ; then
43     echo "Failed to find file ${PORTAL_DOCKERFILE}; must start in deliveries folder; exiting"
44     exit 1
45 fi
46
47 # Store directory names as variables
48 # This is the deliveries area.
49 DELIVDIR="$(pwd)"
50 # parent directory, for finding source projects
51 cd ..
52 BASEDIR="$(pwd)"
53 cd $DELIVDIR
54
55 # Relative path of temp directory
56 BUILD_REL="build"
57 # Absolute path of temp directory
58 BUILD_ABS=$DELIVDIR/$BUILD_REL
59
60 # Build Java projects.
61 # (use env var toskip when debugging Docker build problems)
62 if [ "$SKIP_JAVA_BUILD" = "please" ]; then
63
64         echo "SKIPPING JAVA BUILD!"
65
66 else
67         echo "Starting Java build."
68
69         # Clean out and recreate
70         rm -fr $BUILD_REL
71         mkdir $BUILD_REL
72
73         echo "Build jar and war files"
74         cd $BASEDIR
75         ${MVN} ${MVN_EXTRA_PORTAL} clean install
76
77         if [ "$SDK_DOCKERFILE" != "skip" ] && [ "SDK_APP_DIR" != "skip" ]; then
78           echo "Build Portal-SDK app"
79           cd $BASEDIR/$SDK_APP_DIR
80           ${MVN} ${MVN_EXTRA_SDK} clean package
81         fi
82
83         echo "Java build complete."
84 fi
85
86 if [ "$BE_DOCKERFILE" != "skip" ] || [ "PORTAL_DOCKERFILE" != "skip" ]; then
87   echo "Copy Portal app BE"
88   cp $BASEDIR/$BE_WAR_DIR/$BE_WAR_FILE $BUILD_ABS
89 fi
90
91 if [ "$FE_DOCKERFILE" != "skip" ] || [ "PORTAL_DOCKERFILE" != "skip" ]; then
92   echo "Copy Portal app FE"
93   cp -r $BASEDIR/$FE_DIR $BUILD_ABS
94 fi
95
96 if [ "$WMS_DOCKERFILE" != "skip" ]; then
97   echo "Copy Portal widget-ms"
98   cp $BASEDIR/$WIDGET_MS_JAR_DIR/$WIDGET_MS_JAR_FILE $BUILD_ABS
99 fi
100
101 if [ "$SDK_DOCKERFILE" != "skip" ] && [ "SDK_APP_DIR" != "skip" ]; then
102   echo "Copy Portal-SDK app build results"
103   cp $BASEDIR/$SDK_WAR_DIR/$SDK_WAR_FILE $BUILD_ABS
104 fi
105
106 # Build Docker images
107
108 PROXY_ARGS=""
109 if [ $HTTP_PROXY ]; then
110     PROXY_ARGS+="--build-arg HTTP_PROXY=${HTTP_PROXY}"
111 fi
112 if [ $HTTPS_PROXY ]; then
113     PROXY_ARGS+=" --build-arg HTTPS_PROXY=${HTTPS_PROXY}"
114 fi
115
116 # must work in delivery directory
117 cd $DELIVDIR
118
119 if [ "$DB_DOCKERFILE" = "skip" ]; then 
120   echo "SKIPPING DB DOCKER BUILD!"
121 else 
122 # Copy DDL/DML to required directories
123 # RELATIVE PATHS to local directories with database scripts
124 # bcos Docker looks within this build area only
125   DB_SCRIPT_DIR=$BUILD_REL/db-scripts
126   mkdir -p ${DELIVDIR}/${DB_SCRIPT_DIR}
127 # Portal
128   cp $BASEDIR/ecomp-portal-DB-common/*.sql ${DB_SCRIPT_DIR}
129   cp $BASEDIR/ecomp-portal-DB-os/*.sql ${DB_SCRIPT_DIR}
130 # SDK app
131   cp $BASEDIR/sdk/ecomp-sdk/epsdk-app-common/db-scripts/*.sql ${DB_SCRIPT_DIR}
132   cp $BASEDIR/sdk/ecomp-sdk/epsdk-app-os/db-scripts/*.sql ${DB_SCRIPT_DIR}
133
134   echo "Build mariadb docker image"
135   DB_DOCKER_CMD="
136     docker build -t ${DB_IMG_NAME}:${PORTAL_TAG} ${PROXY_ARGS}
137       --build-arg DB_SCRIPT_DIR=${DB_SCRIPT_DIR}
138       -f $DB_DOCKERFILE .
139   "
140   $DB_DOCKER_CMD
141 fi
142
143 # Copy cassandra scripts to required directories
144 # Portal
145 #cp $BASEDIR/ecomp-portal-DB-common/*.cql ${DELIVDIR}
146 # SDK app
147 #cp $BASEDIR/sdk/ecomp-sdk/epsdk-app-common/db-scripts/*.cql ${DELIVDIR}
148
149 # Build Docker Images
150
151 #Combined FE/BE image
152 if [ "$PORTAL_DOCKERFILE" = "skip" ]; then
153   echo "SKIPPING PORTAL DOCKER IMAGE BUILD!"
154 else
155   echo "Build portal docker image"
156   PORTAL_DOCKER_CMD="
157     docker build -t ${EP_IMG_NAME}:${PORTAL_TAG} ${PROXY_ARGS}
158       --build-arg FE_DIR=$BUILD_REL/public
159       --build-arg PORTAL_WAR=$BUILD_REL/$BE_WAR_FILE
160       --build-arg SERVERXML=${SERVER_XML_DIR}/server.xml
161       --build-arg PORTALCONTEXT=$PORTALCONTEXT
162       -f $PORTAL_DOCKERFILE .
163   "
164   $PORTAL_DOCKER_CMD
165 fi
166
167 if [ "$SDK_DOCKERFILE" = "skip" ]; then
168   echo "SKIPPING SDK DOCKER IMAGE BUILD!"
169 else
170   echo "Build sdk demo app docker image"
171   SDK_DOCKER_CMD="
172     docker build -t ${SDK_IMG_NAME}:${PORTAL_TAG} ${PROXY_ARGS}
173       --build-arg SDK_WAR=$BUILD_REL/$SDK_WAR_FILE
174       --build-arg SDKCONTEXT=$SDKCONTEXT
175       -f $SDK_DOCKERFILE .
176   "
177   $SDK_DOCKER_CMD
178 fi
179
180 if [ "$BE_DOCKERFILE" = "skip" ]; then
181   echo "SKIPPING BE DOCKER IMAGE BUILD!"
182 else 
183   echo "Build portal be image"
184   BE_DOCKER_CMD="
185     docker build -t ${BE_IMG_NAME}:${PORTAL_TAG} ${PROXY_ARGS}
186       --build-arg PORTAL_WAR=$BUILD_REL/$BE_WAR_FILE
187       --build-arg SERVERXML=${SERVER_XML_DIR}/server.xml
188       --build-arg PORTALCONTEXT=$PORTALCONTEXT
189       --build-arg BE_BASE_IMAGE=$BE_BASE_IMAGE
190       -f $BE_DOCKERFILE .
191   "
192   $BE_DOCKER_CMD
193 fi
194
195 if [ "$FE_DOCKERFILE" = "skip" ]; then
196   echo "SKIPPING FE DOCKER IMAGE BUILD!"
197 else 
198   echo "Build portal fe image"
199   FE_DOCKER_CMD="
200     docker build -t ${FE_IMG_NAME}:${PORTAL_TAG} ${PROXY_ARGS}
201       --build-arg FE_DIR=$BUILD_REL/public
202       --build-arg FECONTEXT=$FECONTEXT
203       --build-arg FE_BASE_IMAGE=$FE_BASE_IMAGE
204       -f $FE_DOCKERFILE .
205   "
206   $FE_DOCKER_CMD
207 fi
208
209 if [ "$WMS_DOCKERFILE" = "skip" ]; then
210   echo "SKIPPING WIDGET-MS DOCKER IMAGE BUILD!"
211 else
212   echo "Build widget-ms docker image"
213   WMS_DOCKER_CMD="
214     docker build -t ${WMS_IMG_NAME}:${PORTAL_TAG} ${PROXY_ARGS}
215       --build-arg WMS_JAR=$BUILD_REL/$WIDGET_MS_JAR_FILE
216       -f Dockerfile.widgetms .
217   "
218   $WMS_DOCKER_CMD
219 fi
220
221 # For ease of debugging, leave the build dir
222 # echo "Cleaning up"
223 # rm -fr $BUILD_REL