From 03061a8792ebdb6553940eefeeac6c494f5042d2 Mon Sep 17 00:00:00 2001 From: Joze RIHTARSIC <joze.rihtarsic@ext.ec.europa.eu> Date: Tue, 1 Oct 2019 08:18:09 +0200 Subject: [PATCH] update docker images for pushing to dockerhub --- .../compose/tomcat-mysql/docker-compose.yml | 4 +- smp-docker/compose/tomcat-mysql/runCompose.sh | 33 ++++++--- smp-docker/images/build-docker-images.sh | 71 ++++++++++++++----- smp-docker/images/tomcat-mysql/Dockerfile | 40 +++++------ smp-docker/images/tomcat-mysql/entrypoint.sh | 12 ++-- 5 files changed, 102 insertions(+), 58 deletions(-) diff --git a/smp-docker/compose/tomcat-mysql/docker-compose.yml b/smp-docker/compose/tomcat-mysql/docker-compose.yml index 1909a54b7..4f04fdbec 100644 --- a/smp-docker/compose/tomcat-mysql/docker-compose.yml +++ b/smp-docker/compose/tomcat-mysql/docker-compose.yml @@ -1,8 +1,8 @@ version: "3.0" services: tomcat-mysql: - image: tomcat_mysql_smp - container_name: tomcat_mysql_smp + image: smp-tomcat-mysql:${SMP_VERSION} + container_name: smp-tomcat-mysql volumes: - ./properties/db-scripts:/tmp/custom-database-scripts/ # init script. ports: diff --git a/smp-docker/compose/tomcat-mysql/runCompose.sh b/smp-docker/compose/tomcat-mysql/runCompose.sh index faeb3e80c..930fc9570 100755 --- a/smp-docker/compose/tomcat-mysql/runCompose.sh +++ b/smp-docker/compose/tomcat-mysql/runCompose.sh @@ -5,23 +5,36 @@ SML_INIT_DATABASE="../../../smp-webapp/src/main/smp-setup/database-scripts/mysql SML_INIT_DATABASE_DATA="../../../smp-webapp/src/main/smp-setup/database-scripts/mysql5innodb-data.sql" # soap ui data PREFIX="smp-tomcat-mysql" +SMP_VERSION= - - -echo "Working Directory: ${WORKING_DIR}" -cd "$WORKING_DIR" # clear volume and containers - to run restart from strach # READ argumnets -while getopts i: option +while getopts i:v: option do case "${option}" in i) SML_INIT_DATABASE_DATA=${OPTARG};; + v) SMP_VERSION=${OPTARG};; esac done + +if [ -z "${SMP_VERSION}" ] +then + # get version from POM file + + SMP_VERSION="$(mvn org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate -Dexpression=project.version -q -DforceStdout)" + +fi + +echo "SMP version: $SMP_VERSION" +echo "Working Directory: ${WORKING_DIR}" +cd "$WORKING_DIR" + + + # check if property folder exists if not create it if [ ! -d "./properties/db-scripts/" ] then @@ -36,7 +49,8 @@ cp "${SML_INIT_DATABASE_DATA}" ./properties/db-scripts/mysql5innodb-data.sql function clearOldContainers { echo "Clear containers and volumes" - docker-compose -p "${PREFIX}" rm -s -f -v + docker-compose -p "${PREFIX}" rm -s -f -v + echo "Clear containers and volumes" } @@ -44,9 +58,12 @@ function clearOldContainers { # Always delete shared-status-folder else weblogic will start to quick! # because statuses are sync over shared-status-folder folders and it could contain status from previous run. +export SMP_VERSION="${SMP_VERSION}" +echo "Clear old containser" clearOldContainers -# start -docker-compose -p ${PREFIX} up -d --force-recreate +# start " +echo "Start compose" +docker-compose -p ${PREFIX} up -d --force-recreate # wait until service is up for i in `seq 100`; do timeout 1 bash -c ' curl --head --silent --fail http://localhost:8981/smp/'; if [ $? -eq 0 ] ; then break;fi; echo "$i. Wait for tomcat to start!"; sleep 5; done; diff --git a/smp-docker/images/build-docker-images.sh b/smp-docker/images/build-docker-images.sh index 6b9e175db..ae5bfcfb7 100755 --- a/smp-docker/images/build-docker-images.sh +++ b/smp-docker/images/build-docker-images.sh @@ -14,9 +14,7 @@ # 3. run the scripts with arguments # build-docker-images.sh -f build-docker-images.sh -f ${oracle_artefact_folder} -DIRNAME=`dirname "$0"` -cd "$DIRNAME" -DIRNAME="$(pwd -P)" + ORACLE_DB_FILE="oracle-xe-11.2.0-1.0.x86_64.rpm.zip" SERVER_JDK_FILE="server-jre-8u211-linux-x64.tar.gz" @@ -27,9 +25,14 @@ ORACLE_ARTEFACTS="/CEF/oracle-install" SMP_ARTEFACTS="../../smp-webapp/target/" SMP_ARTEFACTS_CLEAR="false" +SMP_IMAGE_PUBLISH="false" +DOCKER_USER=$bamboo_DOCKER_USER +DOCKER_PASSWORD=$bamboo_DOCKER_PASSWORD + + # READ argumnets -while getopts v:o:s:c: option +while getopts v:o:s:c:p: option do case "${option}" in @@ -37,19 +40,22 @@ do o) ORACLE_ARTEFACTS=${OPTARG};; s) SMP_ARTEFACTS=${OPTARG};; c) SMP_ARTEFACTS_CLEAR=${OPTARG};; + p) SMP_IMAGE_PUBLISH=${OPTARG};; esac done -if [ -z "${SML_VERSION}" ] +if [[ -z "${SML_VERSION}" ]] then # get version from setup file - cd "${SMP_ARTEFACTS}" - SMP_VERSION="$(ls smp-*-setup.zip | sed -e 's/.*smp-//g' | sed -e 's/-setup\.zip$//g')" + #cd "${SMP_ARTEFACTS}" + #SMP_VERSION="$(ls smp-*-setup.zip | sed -e 's/.*smp-//g' | sed -e 's/-setup\.zip$//g')" + SMP_VERSION="$(mvn org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate -Dexpression=project.version -q -DforceStdout)" # go back to dirname - cd "$DIRNAME" fi - +DIRNAME=`dirname "$0"` +cd "$DIRNAME" +DIRNAME="$(pwd -P)" echo "*****************************************************************" echo "* SMP artefact folders: $SMP_ARTEFACTS, (Clear folder after build: $SMP_ARTEFACTS_CLEAR )" echo "* Build SMP image for version $SMP_VERSION" @@ -58,13 +64,14 @@ echo "*****************************************************************" echo "" + # ----------------------------------------------------------------------------- # validate all necessary artefacts and prepare files to build images # ----------------------------------------------------------------------------- validateAndPrepareArtefacts() { # check oracle database - if [ ! -f "${ORACLE_ARTEFACTS}/${ORACLE_DB_FILE}" ] + if [[ ! -f "${ORACLE_ARTEFACTS}/${ORACLE_DB_FILE}" ]] then echo "Oracle database artefacts '${ORACLE_ARTEFACTS}/${ORACLE_DB_FILE}' not found." exit 1; @@ -74,7 +81,7 @@ echo "" fi # check server JDK - if [ ! -f "${ORACLE_ARTEFACTS}/${SERVER_JDK_FILE}" ] + if [[ ! -f "${ORACLE_ARTEFACTS}/${SERVER_JDK_FILE}" ]] then echo "Server JDK artefacts '${ORACLE_ARTEFACTS}/${SERVER_JDK_FILE}' not found." exit 1; @@ -84,7 +91,7 @@ echo "" fi # check weblogic - if [ ! -f "${ORACLE_ARTEFACTS}/${WEBLOGIC_122_QUICK_FILE}" ] + if [[ ! -f "${ORACLE_ARTEFACTS}/${WEBLOGIC_122_QUICK_FILE}" ]] then echo "Weblogic artefacts '${ORACLE_ARTEFACTS}/${WEBLOGIC_122_QUICK_FILE}' not found." exit 1; @@ -94,14 +101,14 @@ echo "" fi - if [ ! -d "./tomcat-mysql/artefacts/" ] + if [[ ! -d "./tomcat-mysql/artefacts/" ]] then mkdir -p "./tomcat-mysql/artefacts/" fi # SMP artefats - if [ ! -f "${SMP_ARTEFACTS}/smp.war" ] + if [[ ! -f "${SMP_ARTEFACTS}/smp.war" ]] then echo "SMP artefact '${SMP_ARTEFACTS}/smp.war' not found. Was project built!" exit 1; @@ -114,7 +121,7 @@ echo "" fi # SMP setup zip - if [ ! -f "${SMP_ARTEFACTS}/smp-${SMP_VERSION}-setup.zip" ] + if [[ ! -f "${SMP_ARTEFACTS}/smp-${SMP_VERSION}-setup.zip" ]] then echo "SMP setup boundle '${SMP_ARTEFACTS}/smp-${SMP_VERSION}-setup.zip' not found. Was project built!" exit 1; @@ -138,7 +145,7 @@ echo "" # build docker image for oracle database # ----------------------------------------------------------------------------- # oracle 1.2.0.2-xe (https://github.com/oracle/docker-images/tree/master/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2) - docker build -f ./oracle/oracle-db-11.2.0.2/Dockerfile.xe -t oracle/database:11.2.0.2-xe ./oracle/oracle-db-11.2.0.2/ + docker build -f ./oracle/oracle-db-11.2.0.2/Dockerfile.xe -t "smp-oradb-11.2.0.2-xe:${SMP_VERSION}" ./oracle/oracle-db-11.2.0.2/ # ----------------------------------------------------------------------------- # build docker image for oracle database @@ -156,13 +163,38 @@ echo "" # build SMP deployment. - docker build -t weblogic_smp ./weblogic-12.2.1.3-smp/ --build-arg SMP_VERSION="$SMP_VERSION" + docker build -t "smp-weblogic-122:${SMP_VERSION}" ./weblogic-12.2.1.3-smp/ --build-arg SMP_VERSION="$SMP_VERSION" # build tomcat mysql image deployment. - docker build -t tomcat_mysql_smp ./tomcat-mysql/ + docker build -t "smp-tomcat-mysql:${SMP_VERSION}" ./tomcat-mysql/ --build-arg SMP_VERSION=${SMP_VERSION} } +function pushImageToDockerhub { + + if [[ "V$SMP_IMAGE_PUBLISH" == "Vtrue" ]] + then + # login to docker + docker login --username="${DOCKER_USER}" --password="${DOCKER_PASSWORD}" + # push images + pushImageIfExisting "smp-tomcat-mysql:${SMP_VERSION}" + pushImageIfExisting "smp-weblogic-122:${SMP_VERSION}" + pushImageIfExisting "smp-oradb-11.2.0.2-xe:${SMP_VERSION}" + fi +} + + +function pushImageIfExisting { + if [[ "x$(docker images -q "${1}")" != "x" ]]; then + echo "Pushing image ${1}" + docker tag "${1}" "${DOCKER_USER}"/"${1}" + docker push "${DOCKER_USER}"/"${1}" + else + echo "Could not find image ${1} to push!" + fi + return 0 +} + # ----------------------------------------------------------------------------- # clean # ----------------------------------------------------------------------------- @@ -176,7 +208,7 @@ echo "" # clear also the tomcat/mysql image rm -rf "./tomcat-mysql/artefacts/*.*" - if [ "V$SMP_ARTEFACTS_CLEAR" == "Vtrue" ] + if [[ "V$SMP_ARTEFACTS_CLEAR" == "Vtrue" ]] then rm -rf "${SMP_ARTEFACTS}/smp-setup.zip" rm -rf "${SMP_ARTEFACTS}/smp.war" @@ -187,5 +219,6 @@ echo "" validateAndPrepareArtefacts buildImages +pushImageToDockerhub cleanArtefacts diff --git a/smp-docker/images/tomcat-mysql/Dockerfile b/smp-docker/images/tomcat-mysql/Dockerfile index 040cc48cf..404419984 100755 --- a/smp-docker/images/tomcat-mysql/Dockerfile +++ b/smp-docker/images/tomcat-mysql/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:18.04 MAINTAINER Joze Rihtarsic - +ARG SMP_VERSION # Set the SMP_VERSION env variable \ ENV SMP_HOME=/opt/smp \ MYSQL_DRV_VERSION=5.1.46 \ @@ -14,6 +14,14 @@ ENV SMP_HOME=/opt/smp \ DB_USER_PASSWORD=smp \ MYSQL_ROOT_PASSWORD=root +EXPOSE 3306 8080 + +ENV LANG en_US.utf8 +ADD ./artefacts /tmp/artefacts +COPY ./entrypoint.sh /sbin/entrypoint.sh +VOLUME ["/data"] + + # install utils, java, mysql \ RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ @@ -41,29 +49,15 @@ RUN apt-get update \ && sed -i -e "s/<\/Context>/<Resource name=\"jdbc\/eDeliverySmpDs\" auth=\"Container\" type=\"javax.sql.DataSource\" maxTotal=\"100\" maxIdle=\"30\" maxWaitMillis=\"10000\" username=\"$DB_USER\" password=\"$DB_USER\" driverClassName=\"com.mysql.jdbc.Driver\" url=\"jdbc:mysql:\/\/localhost:3306\/$DB_SCHEMA?useSSL=false\&characterEncoding=UTF-8\&useUnicode=true\"\/><\/Context>/g" "$SMP_HOME/apache-tomcat-$TOMCAT_VERSION/conf/context.xml" \ && sed -i -e "s/<Connector /<Connector URIEncoding=\"UTF-8\" /g" "$SMP_HOME/apache-tomcat-$TOMCAT_VERSION/conf/server.xml" \ && echo "datasource.jndi=java:comp/env/jdbc/eDeliverySmpDs" > $SMP_HOME/apache-tomcat-$TOMCAT_VERSION/smp/conf/smp.config.properties \ - && echo "\nAdd init parameters" >> $SMP_HOME/apache-tomcat-$TOMCAT_VERSION/smp/conf/smp.config.properties \ - && echo "\nauthentication.blueCoat.enabled=true" >> $SMP_HOME/apache-tomcat-$TOMCAT_VERSION/smp/conf/smp.config.properties - + && echo "\nAdd init parameters" >> $SMP_HOME/apache-tomcat-$TOMCAT_VERSION/smp/conf/smp.config.properties \ + && echo "\nauthentication.blueCoat.enabled=true" >> $SMP_HOME/apache-tomcat-$TOMCAT_VERSION/smp/conf/smp.config.properties \ + && unzip /tmp/artefacts/smp-setup.zip -d /tmp/ \ + && mv /tmp/smp-$SMP_VERSION/* /tmp/artefacts/ \ + && rm -rf /tmp/smp-$SMP_VERSION \ + && mv /tmp/artefacts/smp.war $SMP_HOME/apache-tomcat-$TOMCAT_VERSION/webapps/ \ + && chmod u+x /sbin/entrypoint.sh \ + && sed -i -e "s/127.0.0.1/0.0.0.0/g" /etc/mysql/mysql.conf.d/mysqld.cnf -RUN curl -o /tmp/org.jacoco.agent.jar https://repo1.maven.org/maven2/org/jacoco/org.jacoco.agent/0.8.4/org.jacoco.agent-0.8.4-runtime.jar - -# copy application to image -ADD ./artefacts /tmp/artefacts - - -# install SMP -RUN unzip /tmp/artefacts/smp-setup.zip -d /tmp/ \ - && mv /tmp/artefacts/smp.war $SMP_HOME/apache-tomcat-$TOMCAT_VERSION/webapps/ - -ENV LANG en_US.utf8 - -VOLUME ["/data"] - -COPY ./entrypoint.sh /sbin/entrypoint.sh -RUN chmod u+x /sbin/entrypoint.sh \ - && sed -i -e "s/127.0.0.1/0.0.0.0/g" /etc/mysql/mysql.conf.d/mysqld.cnf - -EXPOSE 3306 8080 ENTRYPOINT ["/sbin/entrypoint.sh"] diff --git a/smp-docker/images/tomcat-mysql/entrypoint.sh b/smp-docker/images/tomcat-mysql/entrypoint.sh index f7209d529..01ba5052d 100755 --- a/smp-docker/images/tomcat-mysql/entrypoint.sh +++ b/smp-docker/images/tomcat-mysql/entrypoint.sh @@ -71,7 +71,7 @@ init_mysql() { echo '[INFO] start MySQL' service mysql start - if [ -d ${MYSQL_DATA_DIR}/${DB_SCHEMA} ]; then + if [[ -d ${MYSQL_DATA_DIR}/${DB_SCHEMA} ]]; then echo '[INFO] MySQL ${DB_SCHEMA} already present, skipping creation' else echo "[INFO] MySQL ${DB_SCHEMA} not found, creating initial DBs" @@ -79,22 +79,22 @@ init_mysql() { echo 'Create smp database' mysql -h localhost -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_ROOT_PASSWORD';drop schema if exists $DB_SCHEMA;DROP USER IF EXISTS $DB_USER; create schema $DB_SCHEMA;alter database $DB_SCHEMA charset=utf8; create user $DB_USER identified by '$DB_USER_PASSWORD';grant all on $DB_SCHEMA.* to $DB_USER;" - if [ -f "/tmp/custom-database-scripts/mysql5innodb-data.sql" ] + if [[ -f "/tmp/custom-database-scripts/mysql5innodb-data.sql" ]] then echo "Use custom database script! " mysql -h localhost -u root --password=$MYSQL_ROOT_PASSWORD $DB_SCHEMA < "tmp/custom-database-scripts/mysql5innodb.ddl" else - echo "Use default database ddl script!" - mysql -h localhost -u root --password=$MYSQL_ROOT_PASSWORD $DB_SCHEMA < "/tmp/smp-4.1.1-SNAPSHOT/database-scripts/mysql5innodb.ddl" fi + echo "Use default database ddl script! test" + mysql -h localhost -u root --password=$MYSQL_ROOT_PASSWORD $DB_SCHEMA < "/tmp/artefacts/database-scripts/mysql5innodb.ddl" fi - if [ -f "/tmp/custom-database-scripts/mysql5innodb-data.sql" ] + if [[ -f "/tmp/custom-database-scripts/mysql5innodb-data.sql" ]] then echo "Use custom init script! " mysql -h localhost -u root --password=$MYSQL_ROOT_PASSWORD $DB_SCHEMA < "/tmp/custom-database-scripts/mysql5innodb-data.sql" else echo "Use default init script!" - mysql -h localhost -u root --password=$MYSQL_ROOT_PASSWORD $DB_SCHEMA < "/tmp/smp-4.1.1-SNAPSHOT/database-scripts/mysql5innodb-data.sql" + mysql -h localhost -u root --password=$MYSQL_ROOT_PASSWORD $DB_SCHEMA < "/tmp/artefacts/database-scripts/mysql5innodb-data.sql" fi fi -- GitLab