diff --git a/bin/preinstall_cleanup.sh b/bin/preinstall_cleanup.sh new file mode 100755 index 0000000000000000000000000000000000000000..526621c417ade76dd902d57492d3d970a6895c8c --- /dev/null +++ b/bin/preinstall_cleanup.sh @@ -0,0 +1,120 @@ +#!/bin/bash +# ====================================================================== +# +# CLEANUP BEFORE DEPLOYING A TGZ ON A SERVER +# +# ---------------------------------------------------------------------- +# +# This script compares the content of a tgz with the data in +# the webroot. Additional files will be deleted +# +# SYNTAX: +# with 2 parameters it show infos only +# preinstall_cleanup.sh /var/www/preview.mmmu.iml.unibe.ch/ /var/puppet-tgz/mmmu.tgz +# +# with (any) 3rd parameter deletion will be activated +# preinstall_cleanup.sh /var/www/preview.mmmu.iml.unibe.ch/ /var/puppet-tgz/mmmu.tgz forcedelete +# +# ---------------------------------------------------------------------- +# 2013-11-06 axel.hahn@iml.unibe.ch +# ====================================================================== + +# ---------------------------------------------------------------------- +# CONFIG +# ---------------------------------------------------------------------- + + prjdir=$1 + tgz=$2 + bForceDelete=$3 + filelist=/tmp/keepdirslist_$$ + filetgz=/tmp/list_in_tgz_$$ + fileprj=/tmp/list_in_webroot_$$ + keepfile=".htkeep" + + +# ---------------------------------------------------------------------- +# HEADER +# ---------------------------------------------------------------------- + + echo + echo ===== CLEANUP BEFORE DEPLOYING A TGZ ===== + echo + + if [ $# -lt 2 ]; then + echo Syntax is + echo `basename $0` [webroot] [tgz-archive] [[deleteflag]] + exit 1 + fi + +# ---------------------------------------------------------------------- +# CHECKS +# ---------------------------------------------------------------------- + + # check $prjdir to prevent deletetion of a complete server + # the directory must exist, must have a subdir "public_html" or + # "public" and a part must be "/www/" (i.e. /var/www/) + cd $prjdir || exit 2 + + # see #2235 - for nodejs apps the target dir is different + # ls -ld $prjdir/public_html/ || ls -ld $prjdir/public/ || exit 2 + # echo $prjdir | fgrep "/www/" || exit 2 + ls -l $prjdir/*.json || exit 2 + + # check tgz + file $tgz | fgrep "gzip compressed" || exit 3 + +# ---------------------------------------------------------------------- +# MAIN +# ---------------------------------------------------------------------- + + + echo --- scanning for $keepfile in $prjdir ... + cd $prjdir + find . -type f -name $keepfile | sort | sed "s#/$keepfile##g" >$filelist + ls -l $filelist + cat $filelist + echo + + echo --- scanning archive $tgz + tar -tzf $tgz | sed 's#/$##g' | sort >$filetgz + ls -l $filetgz + wc -l $filetgz + head $filetgz + echo + + echo --- scanning web $prjdir + cd $prjdir + find . -print | sort >$fileprj + ls -l $fileprj + wc -l $fileprj + head $fileprj + echo + + echo --- compare ... + # diff $filetgz $fileprj | grep "^>" | cut -f 2 -d " " | while read delfile + diff $filetgz $fileprj | grep "^>" | cut -f 2 -d " " | grep -vf $filelist | while read delfile + do + bDelete=1 + testfile=$delfile + if [ ! -d $delfile ]; then + testfile=`dirname $delfile` + fi + echo $testfile | fgrep -f $filelist >/dev/null + if [ $? -eq 0 ]; then + echo KEEP: $delfile + else + if [ -z $bForceDelete ]; then + echo WILL-BE-DELETED: $delfile + else + echo DELETE: $delfile + rm -rf $delfile + fi + fi + done + +# ---------------------------------------------------------------------- +# CLEANUP +# ---------------------------------------------------------------------- + + rm -f $filelist $filetgz $fileprj + echo done. diff --git a/deploy_app.sh b/deploy_app.sh index 7450e40c789e01f9b45926b8c654a420ea99ba35..850d314299ecca3d06e0d6b15e7b37a26dc888a5 100755 --- a/deploy_app.sh +++ b/deploy_app.sh @@ -112,7 +112,8 @@ if [ $# -eq 0 ]; then rc=$? profile= header "loop over projects is finished" - exit $? + echo exiting with statuscode $rc + exit $rc fi echo @@ -168,6 +169,15 @@ header "PRE tasks" run_task "${profiledir}/tasks_preinstall.sh" +# ---------------------------------------------------------------------- +header "PRE tasks II - cleanup" +test "$cleanup_preview" -eq "1" || echo "SKIP: preview of cleanup is disabled." +test "$cleanup_preview" -eq "1" && "${selfdir}/bin/preinstall_cleanup.sh" "${installdir}" "${downloadfile}" + +test "$cleanup_force" -eq "1" || echo "SKIP: cleanup files is disabled." +test "$cleanup_force" -eq "1" && "${selfdir}/bin/preinstall_cleanup.sh" "${installdir}" "${downloadfile}" "force" + + # ---------------------------------------------------------------------- header "Extract ${downloadfile} $( pwd )" tar -xzf "${downloadfile}" . || exit 3 diff --git a/profiles/example/config.sh.dist b/profiles/example/config.sh.dist index 7360d33e48cc7c92c19c7d930952d70b258e55cf..ac61c21db40b532992edd771f33131c726911d48 100644 --- a/profiles/example/config.sh.dist +++ b/profiles/example/config.sh.dist @@ -10,9 +10,10 @@ installdir=/var/www/FQDN # ----- settings for CI server software package -# override global value -# export IMLCI_PHASE=preview +IMLCI_PROJECT=example -# see output of -export IMLCI_PROJECT=example +# override global value +# IMLCI_PHASE=preview +cleanup_preview=0 +cleanup_force=0 \ No newline at end of file diff --git a/readme.md b/readme.md index 542b4a936158df48fe55f7d32fa7603c0cea1c9c..22af2b8270bf95c02ceb0b64737a7e01a0e4b6d1 100644 --- a/readme.md +++ b/readme.md @@ -46,11 +46,16 @@ installdir=/var/www/myapp # ----- settings for CI server software package + +IMLCI_PROJECT=id-in-ci-server + # override global value -# export IMLCI_PHASE=preview +# IMLCI_PHASE=preview -# see output of -export IMLCI_PROJECT=id-in-ci-server +# cleanup after pre install tasks and bevore extracting data +# set both to 0 .. or only one of them to 1 +cleanup_preview=0 +cleanup_force=0 ``` Make a testrun: `./deploy_app.sh` in application root.