#!/bin/bash BASEDIR=$(pwd) STATIC_TARGET=client/target/generated-webapp/scripts pkg_path(){ [ -f /etc/redhat-release ] || return 1 package=${1} package_name=$(rpm -qa | grep ${package}) [[ -z ${package_name} ]] && echo "${1} not found! Please install it before continue!" >&2 && return 1 echo $(rpm -ql ${package_name} | grep \/bin$ | sed 's/\/bin//g') } [[ -z $M2_HOME ]] && export M2_HOME=$(pkg_path apache-maven) [[ -z $JAVA_HOME ]] && export JAVA_HOME=$(pkg_path java-1.7.0-openjdk-1.7) [[ -z $CATALINA_HOME ]] && export CATALINA_HOME=/usr/share/tomcat6/ export PATH=${PATH}:${M2_HOME}/bin gen_version(){ cs_version=$(mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep '^[0-9]\.') tag_version=$(date +%Y%m%d%H%M) echo "${cs_version}-${tag_version}" } gen_tag(){ branch=${1} [[ -z ${branch} ]] && branch='develop' echo "Changing to branch '${branch}'" git checkout -q ${branch} echo "Getting last changes from git..." git pull -q tag=$(gen_version) git tag $tag remote=$(cat .git/config | awk -F\" '/\[remote/ {print $2}') git push --tags echo "RELEASE/TAG: ${tag}" } gen_package(){ tag=${1} REPOPATH=${2} BUILDDIR="${BASEDIR}/dist/rpmbuild" [[ ! -f /etc/redhat-release ]] && echo "Opss... run this option only in RedHat OS. Exiting..." && return 1 [[ ! -d ${REPOPATH} ]] && echo "The directory ${REPOPATH} does not exist... exiting." && return 1 # export some shell environments variables export MAVEN_OPTS="-XX:MaxPermSize=800m -Xmx2g" (cd packaging/centos63; ./package.sh -t ${tag}) [[ $? -ne 0 ]] && echo "Failed to compile package. Please, fix errors." && return 1 # keep last 3 builds echo "Removing old packages from yum repo ${REPOPATH}" rpms='agent awsapi baremetal-agent cli common management usage' for f in ${rpms}; do rm -f $(ls -1t ${REPOPATH}/cloudstack-${f}* 2>/dev/null | awk 'NR>5 {print}') ; done echo -n "Copying files ${BUILDDIR}/RPMS/x86_64/cloudstack-[a-z]*-${tag}.el6.x86_64.rpm to $REPOPATH..." if mv ${BUILDDIR}/RPMS/x86_64/cloudstack-[a-z]*-${tag}.el6.x86_64.rpm $REPOPATH; then echo "done" else echo -e "\nFailed to copy rpm file" exit 1 fi # Create yum repo echo "Creating yum repo..." whoami=$(whoami) [[ ${whoami} == 'root' ]] && createrepo -q ${REPOPATH} || sudo createrepo -q ${REPOPATH} [[ $? -ne 0 ]] && echo "Failed to create yum repo... Please, fix errors." && return 1 } continuos_delivery(){ # Gen tag repo_path=${1} if [ -z "${TAG}" ]; then echo "Creating a new tag..." TAG=$(gen_tag | awk '/RELEASE\/TAG/ {print $2}') fi # Build package echo "Building tag ${TAG}" gen_package ${TAG} ${repo_path} } case "$1" in run) rm -f *.log MAVEN_OPTS="-Xmx2048m -XX:MaxPermSize=512m -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n" mvn -Dnonoss -Djava.awt.headless=true -pl :cloud-client-ui jetty:run ;; run-simulator) rm -f *.log export RABBIT_MQ_HOST="localhost" export RABBIT_MQ_PORT="5672" export RABBIT_MQ_USER="guest" export RABBIT_MQ_PASSWORD="guest" MAVEN_OPTS="-Xmx2048m -XX:MaxPermSize=512m -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n" mvn -Dnonoss -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dsimulator -pl :cloud-client-ui jetty:run ;; compile) mvn -Dnonoss -Pdeveloper,systemvm -Djava.awt.headless=true -Dsimulator clean install -DskipTests ;; compile-with-tests) mvn -Dnonoss -Pdeveloper,systemvm -Djava.awt.headless=true -Dsimulator clean install ;; compile-changes) mvn -Dnonoss -Pdeveloper,systemvm -Djava.awt.headless=true -Dsimulator install -DskipTests ;; compile-quick) mvn -Dnonoss -Pdeveloper,systemvm -Djava.awt.headless=true -Dsimulator -pl :cloud-framework-config,:cloud-utils,:cloud-server,:cloud-api,:cloud-engine-components-api,:cloud-plugin-network-globonetwork,:cloud-plugin-network-globodns,:cloud-plugin-network-globoaclapi,:cloud-plugin-user-authenticator-oauth2,:cloud-client-ui install -DskipTests ;; update-js) rm -R $STATIC_TARGET/*.js.gz ; rm -R $STATIC_TARGET/loadbalancer/*.js.gz ; rm -R $STATIC_TARGET/ui/*.js.gz ; rm -R $STATIC_TARGET/ui-custom/*.js.gz ; rm -R $STATIC_TARGET/ui/widgets/*.js.gz ; cp -R ui/scripts client/target/generated-webapp/ ; rm -R $STATIC_TARGET/../plugins/globoNetworkVipPlugin/*.js.gz ; cp -R ui/plugins client/target/generated-webapp/ ;; deploydb) mvn -Dnonoss -Pdeveloper -pl developer,tools/devcloud -Ddeploydb ;; deploydb-simulator) mvn -Dnonoss -Pdeveloper -pl developer -Ddeploydb mvn -Dnonoss -Pdeveloper -pl developer -Ddeploydb-simulator ;; db-migrate) [[ -z $WORKON_HOME ]] && WORKON_HOME=$HOME/.virtualenvs source $WORKON_HOME/cloudstack/bin/activate (cd setup/dbmigrate && db-migrate --env=localhost) ;; tag) gen_tag ${2} ;; gen_version) gen_version ;; package) [[ $# -ne 3 ]] && echo "Use: $0 package " && exit 1 tag=$2 repopath=$3 gen_package ${tag} ${repopath} ;; cd) [[ $# -ne 2 ]] && echo "Use: $0 cd " && exit 1 repo_path=$2 starttime=$(date +%s) continuos_delivery ${repo_path} echo "Building package and yum repo in $(($(date +%s)-starttime)) seconds." ;; *) echo "Usage: $0 [action] Actions: RUN run Run Jetty server in DEBUG mode run-simulator Run Jetty w/ hypervisor simulator COMPILE compile Clean and Compile entire cloudstack compile-changes Compile only changes in all cloudstack compile-quick Compile only globo elements update-js Update Javascript only DB deploydb Create Required SQL Schema deploydb-simulator Create Required SQL Schema to use with simulator db-migrate SQL migrations tag Create a git TAG, branch name is optional (develop is default) package Build RPM packages for cloudstack (management, usage, awsapi, common, etc) and create yum repo cd tag + package + create yum repo " exit 2 ;; esac