]> Frank Brehm's Git Trees - profitbricks/jenkins-build-scripts.git/commitdiff
Add extract_storage_kernel+modules_MASTERHACK.sh to not use pre-staging for master...
authorBenjamin Drung <benjamin.drung@profitbricks.com>
Fri, 12 Sep 2014 14:46:09 +0000 (16:46 +0200)
committerBenjamin Drung <benjamin.drung@profitbricks.com>
Fri, 12 Sep 2014 14:46:18 +0000 (16:46 +0200)
extract_storage_kernel+modules_MASTERHACK.sh [new file with mode: 0755]

diff --git a/extract_storage_kernel+modules_MASTERHACK.sh b/extract_storage_kernel+modules_MASTERHACK.sh
new file mode 100755 (executable)
index 0000000..7f43879
--- /dev/null
@@ -0,0 +1,145 @@
+#!/bin/bash
+
+# copyright 2012 Holger Levsen <holger@layer-acht.org>
+# GPL2 licenced
+
+# Quick and dirty hack for master branch on 2014-09-12 by bdrung
+
+set -e
+set -x
+export
+
+#
+# Define default settings
+#
+export DIST=squeeze
+export PB_SUITE=$DISTRIBUTION
+export TARGET_BASE=/srv/storage-kernels
+
+# get the last build number of the given target,
+# parsing tarball's file name under /srv/storage-kernels/.
+function get_last_target_build_no() {
+       TARGET_NAME=$1
+
+       if [ -n "$TARGET_NAME" ]; then
+               retval=$(find $TARGET_BASE/$TARGET_NAME -maxdepth 1 -type f \
+                       -name 'linux-storage*tar.xz' | grep -v "^.$" \
+                       | sed -e "s|$TARGET_BASE/$TARGET_NAME||g" \
+                       | sed -e "s|.*\/linux-storage_[0-9a-zA-Z\.]*\.\([^\.]*\).tar.xz$|\1|g" \
+                       | sort -n | tail -n 1)
+               [ -z "$retval" ] && retval="0"
+       else
+               retval="0"
+       fi
+
+       echo $retval
+}
+
+# overwrite PB_SUITE with branch name
+export PB_SUITE=$(echo $GIT_BRANCH_NAME | tr '/' '-' | sed -e "s/^\(feature\|bugfix\|poc\)-/dev-\1-/g")
+
+case $DISTRIBUTION in
+  production-proposed-updates)
+       export TARGET_NAME=master
+       FEATURE_APTCMD="
+       echo \"deb http://alexandria.pb.local/profitbricks-repository $DISTRIBUTION main contrib non-free\" \
+       > /etc/apt/sources.list.d/profitbricks-linux-image-storage-$TARGET_NAME.list
+       "
+        ;;
+  pre-staging)
+       export TARGET_NAME=develop
+       FEATURE_APTCMD="
+       echo \"deb http://alexandria.pb.local/profitbricks-repository $DISTRIBUTION main contrib non-free\" \
+       > /etc/apt/sources.list.d/profitbricks-linux-image-storage-$TARGET_NAME.list
+       "
+        ;;
+  experimental|dev_feature*)
+       [ -n "$PB_SUITE" ] && export TARGET_NAME=$PB_SUITE || export TARGET_NAME="experimental"
+       LAST_DEVELOP_BUILD_NO=$(get_last_target_build_no develop)
+       BUILD_NUMBER="$LAST_DEVELOP_BUILD_NO.$(printf %03d $BUILD_NUMBER)"
+
+       # kernel images must be installed from a branch-specific distribution
+       # under dev-repository. However, ANDBD modules must be installed from
+       # the pre-staging distribution, because ANDBD modules must have not
+       # been built into packages under a particular distribution.
+       FEATURE_APTCMD="
+       echo \"deb http://alexandria.pb.local/dev-repository $TARGET_NAME main contrib non-free\" \
+       > /etc/apt/sources.list.d/profitbricks-linux-image-storage-$TARGET_NAME.list ; \
+       echo \"deb http://alexandria.pb.local/profitbricks-repository pre-staging main contrib non-free\" \
+       > /etc/apt/sources.list.d/profitbricks-linux-image-storage-develop.list
+       "
+       FEATURE_VERSCMD="
+       export FEATURE_VERSION=\`apt-cache showpkg profitbricks-linux-image-storage -a \
+       | grep $TARGET_NAME | grep \) | sed -e \"s|\([^\.]*\)\ .*$|\1|g\"\`
+       "
+        ;;
+  *)
+       echo "DISTRIBUTION must be 'production-proposed-updates', 'pre-staging', 'experimental',"
+       echo "or 'dev_feature*'"
+       echo "exiting."
+       figlet "FAIL"
+       exit 1
+        ;;
+esac
+
+export TARGET_DIR=$TARGET_BASE/$TARGET_NAME/$BUILD_NUMBER
+export JOB_HOME=$JENKINS_HOME/jobs/$JOB_NAME/builds
+
+SCRIPTSDIR=$(dirname $0)
+BUILD_SCRIPT=$(mktemp -t ${0##*/}.XXXXXXXXXX)
+cat > $BUILD_SCRIPT <<-EOF
+#/bin/bash
+set -e
+set -x
+apt-get update
+# grub is needed in the postinst...
+apt-get install -y grub2 
+$FEATURE_VERSCMD
+[ -n "###FEATURE_VERSION" ] && export FEATURE_VERSION="=###FEATURE_VERSION"
+apt-get -t $DISTRIBUTION -y install profitbricks-linux-image-storage###FEATURE_VERSION || true
+apt-get -y install profitbricks-andbd-modules-storage || true
+mkdir -p $TARGET_DIR
+export KERNEL_VERSION=###(ls /boot/vmlinu* | cut -d "-" -f2-)
+export GENTOO_KERNEL_VERSION="###(ls /boot/vmlinu* | cut -d "-" -f2).$BUILD_NUMBER"
+cp -v /boot/vmlinu* $TARGET_DIR/
+cp -v /boot/config* $TARGET_DIR/
+cd /lib/modules/###{KERNEL_VERSION}
+/bin/tar -cJvf $TARGET_DIR/modules-###{KERNEL_VERSION}.tar.xz .
+echo "Job      : $JOB_NAME" > $TARGET_DIR/sources.txt
+echo "Build-Nr.: $BUILD_NUMBER" >> $TARGET_DIR/sources.txt
+echo "URL      : http://jenkins/job/$JOB_NAME/$BUILD_NUMBER/" >> $TARGET_DIR/sources.txt
+echo "Kernel:  : ###KERNEL_VERSION" >> $TARGET_DIR/sources.txt
+echo >> $TARGET_DIR/sources.txt
+apt-cache show profitbricks-linux-image-storage >> $TARGET_DIR/sources.txt
+apt-cache show profitbricks-andbd-modules-storage >> $TARGET_DIR/sources.txt
+/bin/tar -cJvf $TARGET_BASE/$TARGET_NAME/linux-storage_###{GENTOO_KERNEL_VERSION}.tar.xz -C $TARGET_DIR .
+EOF
+chmod +x $BUILD_SCRIPT
+# turn the shell call back into a shell call
+sed -i -s "s|###|$|g" $BUILD_SCRIPT
+
+#
+# run $BUILD_SCRIPT in chroot environment
+#
+sudo pbuilder --execute --bindmounts $TARGET_BASE -- $BUILD_SCRIPT
+rm $BUILD_SCRIPT
+
+set +x
+echo "Doing garbage collection now"
+#
+# cleanup $TARGET_DIR, keep as many images as jenkins keeps build logs
+#
+cd $TARGET_BASE/$TARGET_NAME
+# loop through all results of current target
+for i in $(find . -maxdepth 1 -type d|sort) ; do
+       # check if the jenkins build log still exists (and $i != ".")
+       # and if not, delete the old target as well
+       if [ ! -L $JOB_HOME/$i ] && [ "${i}" != "." ] ; then
+               echo "Deleting $TARGET_BASE/$TARGET_NAME/$i"
+               sudo rm -r ./$i
+       fi
+done
+
+figlet "OK"
+
+