[Qa-jenkins-scm] [jenkins.debian.net] 01/01: reproducible arch: actually add reproducible_build_arch_pkg.sh to git

Holger Levsen holger at moszumanska.debian.org
Fri Oct 16 14:55:13 UTC 2015


This is an automated email from the git hooks/post-receive script.

holger pushed a commit to branch master
in repository jenkins.debian.net.

commit 9b33c4d587e733f93b8b7fe2661db46c041f02f3
Author: Holger Levsen <holger at layer-acht.org>
Date:   Fri Oct 16 16:54:21 2015 +0200

    reproducible arch: actually add reproducible_build_arch_pkg.sh to git
---
 bin/reproducible_build_arch_pkg.sh | 143 +++++++++++++++++++++++++++++++++++++
 1 file changed, 143 insertions(+)

diff --git a/bin/reproducible_build_arch_pkg.sh b/bin/reproducible_build_arch_pkg.sh
new file mode 100755
index 0000000..57cb426
--- /dev/null
+++ b/bin/reproducible_build_arch_pkg.sh
@@ -0,0 +1,143 @@
+#!/bin/bash
+
+# Copyright 2015 Holger Levsen <holger at layer-acht.org>
+# released under the GPLv=2
+
+DEBUG=false
+. /srv/jenkins/bin/common-functions.sh
+common_init "$@"
+
+set -e
+
+cleanup_all() {
+	rm $TMPDIR -r
+	echo "$(date -u) - $TMPDIR deleted."
+}
+
+handle_remote_error() {
+	MESSAGE="${BUILD_URL}console got remote error $1"
+	echo "$(date -u ) - $MESSAGE" | tee -a /var/log/jenkins/reproducible-remote-error.log
+	echo "Sleeping 5m before aborting the job."
+	sleep 5m
+	exec /srv/jenkins/bin/abort.sh
+	exit 0
+}
+
+first_build() {
+	echo "============================================================================="
+	echo "Building ${SRCPACKAGE} for Archlinux on $(hostname -f) now."
+	echo "Date:     $(date)"
+	echo "Date UTC: $(date -u)"
+	echo "============================================================================="
+	set -x
+	schroot --begin-session --session-name=$SRCPACKAGE -c jenkins-reproducible-arch
+	schroot --run-session -c $SRCPACKAGE --directory /tmp -- cp -r /var/abs/core/$PKG /tmp
+	schroot --run-session -c $SRCPACKAGE --directory /tmp/$PKG -- makepkg --skippgpcheck
+	schroot --end-session -c $SRCPACKAGE
+	if ! "$DEBUG" ; then set +x ; fi
+}
+
+second_build() {
+	echo "============================================================================="
+	echo "Re-Building ${SRCPACKAGE} for Archlinux on $(hostname -f) now."
+	echo "Date:     $(date)"
+	echo "Date UTC: $(date -u)"
+	echo "============================================================================="
+	set -x
+	schroot --begin-session --session-name=$SRCPACKAGE -c jenkins-reproducible-arch
+	schroot --run-session -c $SRCPACKAGE --directory /tmp -- cp -r /var/abs/core/$PKG /tmp
+	schroot --run-session -c $SRCPACKAGE --directory /tmp/$PKG -- makepkg --skippgpcheck
+	schroot --end-session -c $SRCPACKAGE
+	if ! "$DEBUG" ; then set +x ; fi
+}
+
+remote_build() {
+	local BUILDNR=$1
+	local NODE=profitbricks-build3-amd64.debian.net
+	local PORT=22
+	set +e
+	ssh -p $PORT $NODE /bin/true
+	RESULT=$?
+	# abort job if host is down
+	if [ $RESULT -ne 0 ] ; then
+		SLEEPTIME=$(echo "$BUILDNR*$BUILDNR*5"|bc)
+		echo "$(date -u) - $NODE seems to be down, sleeping ${SLEEPTIME}min before aborting this job."
+		sleep ${SLEEPTIME}m
+		exec /srv/jenkins/bin/abort.sh
+	fi
+	ssh -p $PORT $NODE /srv/jenkins/bin/reproducible_build_arch_pkg.sh $BUILDNR ${SRCPACKAGE} ${TMPDIR}
+	RESULT=$?
+	if [ $RESULT -ne 0 ] ; then
+		handle_remote_error "with exit code $RESULT from $NODE for build #$BUILDNR for ${SRCPACKAGE}"
+	fi
+	rsync -e "ssh -p $PORT" -r $NODE:$TMPDIR/b$BUILDNR $TMPDIR/
+	RESULT=$?
+	if [ $RESULT -ne 0 ] ; then
+		echo "$(date -u ) - rsync from $NODE failed, sleeping 2m before re-trying..."
+		sleep 2m
+		rsync -e "ssh -p $PORT" -r $NODE:$TMPDIR/b$BUILDNR $TMPDIR/
+		RESULT=$?
+		if [ $RESULT -ne 0 ] ; then
+			handle_remote_error "when rsyncing remote build #$BUILDNR results from $NODE"
+		fi
+	fi
+	ls -R $TMPDIR
+	ssh -p $PORT $NODE "rm -r $TMPDIR"
+	set -e
+}
+
+build_rebuild() {
+	mkdir b1 b2
+	remote_build 1
+	remote_build 2
+}
+
+#
+# below is what controls the world
+#
+
+TMPDIR=$(mktemp --tmpdir=/srv/reproducible-results -d)  # where everything actually happens
+trap cleanup_all INT TERM EXIT
+cd $TMPDIR
+
+DATE=$(date -u +'%Y-%m-%d %H:%M')
+START=$(date +'%s')
+RBUILDLOG=$(mktemp --tmpdir=$TMPDIR)
+BUILDER="${JOB_NAME#reproducible_builder_}/${BUILD_ID}"
+
+#
+# determine mode
+#
+if [ "$1" = "" ] ; then
+	echo "Error, needs at least one parameter."
+	exit 1
+elif [ "$1" = "1" ] || [ "$1" = "2" ] ; then
+	MODE="$1"
+	SRCPACKAGE="$2"
+	TMPDIR="$3"
+	[ -d $TMPDIR ] || mkdir -p $TMPDIR
+	cd $TMPDIR
+	mkdir b$MODE
+	if [ "$MODE" = "1" ] ; then
+		first_build
+	else
+		second_build
+	fi
+	mv -v /tmp/$PKG $TMPDIR/b$mode
+	echo "$(date -u) - build #$MODE for $SRCPACKAGE on $HOSTNAME done."
+	exit 0
+elif [ "$2" != "" ] ; then
+	MODE="master"
+fi
+
+#
+# main - only used in master-mode
+#
+SRCPACKAGE=sudo
+build_rebuild
+#call_diffoscope
+
+cd ..
+cleanup_all
+trap - INT TERM EXIT
+

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/qa/jenkins.debian.net.git



More information about the Qa-jenkins-scm mailing list