contrib/rh-bkr: add jenkins.sh script to schedule beaker job from CI/Jenkins

Also support new environment variables or fix handling so that
they become usable as parameters from Jenkins
This commit is contained in:
Thomas Haller 2015-11-12 18:33:22 +01:00
parent 2b19146b6a
commit 517e901b98
2 changed files with 79 additions and 7 deletions

View file

@ -17,7 +17,6 @@ import urllib
import glob
import uuid
import nitrate
import sets
devnull = open(os.devnull, 'w')
@ -53,7 +52,7 @@ def is_sequence(arg):
hasattr(arg, "__iter__"))
def seq_unique(seq):
s = sets.Set()
s = set()
for i in seq:
if i not in s:
s.add(i)
@ -592,7 +591,8 @@ class CmdSubmit(CmdBase):
self.parser.add_argument('--job', '-j', help='beaker xml job file')
self.parser.add_argument('--job-default', '-J', action='store_true', help='Use default job file. Only has effect if --job is not specified')
self.parser.add_argument('--verbose', '-v', action='count', help='print more information')
self.parser.add_argument('--reservesys', '-R', action='store_true', help='add task /distribution/reservesys')
self.parser.add_argument('--reservesys', '-R', action='store_true', help='add task /distribution/reservesys (same as --reservesys-time=86400')
self.parser.add_argument('--reservesys-time', help='add task /distribution/reservesys with a duration in second')
self.parser.add_argument('--disable-selinux', action='store_true', help='add kernel option selinux=0 to disable AVC checks ($SELINUX_DISABLED)')
self.parser.add_argument('--var', '-V', action='append', help='Set template replacements (alternative to setting via environment variables')
self.parser.add_argument('--hosttype', help='The host type. Known values are \'veth\', \'dcb\', \'infiniband\', and \'wifi\'. Anything else uses the default. This determines the $HOSTREQUIRES template')
@ -844,13 +844,18 @@ class CmdSubmit(CmdBase):
v = self._get_var('RESERVESYS')
if v is not None:
return v
if not self.options.reservesys:
duration = self._get_var('RESERVE')
if self.options.reservesys:
duration = '86400'
if self.options.reservesys_time:
duration = self.options.reservesys_time
if not duration:
return ""
return '<reservesys duration="86400"/>'
return '<reservesys duration="%s"/>' % (duration)
def _get_var_for_ARCH(self, key):
v = self._get_var('ARCH')
if v is not None:
if v:
return v
v = self._get_var('DISTRO_ARCH')
if v is not None:
@ -861,7 +866,7 @@ class CmdSubmit(CmdBase):
v = self._get_var('SELINUX_DISABLED')
if v is not None:
return v
if self.options.disable_selinux:
if self.options.disable_selinux or self._get_var('SELINUX') == 'false':
return 'selinux=0'
return ''

67
contrib/rh-bkr/jenkins.sh Executable file
View file

@ -0,0 +1,67 @@
#!/bin/bash
set -e
set -x
DIR="$(dirname "$(readlink -f "$0")")"
# We allow and expect the following environment variable
# set by jenkins:
# ARCH= // one of x86_64, ppc64, ppc64le, s390x, aarch64
# RPM_URLS= // space separated list of --rpm arguments
# BUILD_ID= // if non-empty, build NetworkManager from source and install it
# RESERVE= // number of seconds to reserve the system (or empty)
# SELINUX= // if set to 'false', boot with selinux=0
# PROFILE=
# HOSTYPE=
# TESTS=
# ARGS=
RPM=()
for r in $RPM_URLS; do
RPM+=(--rpm "$r")
done
if [ -n "$BUILD_ID" ]; then
BUILD_ID=(--build-id "$BUILD_ID")
else
BUILD_ID=()
fi
if [ -n "$PROFILE" -a "$PROFILE" != "--" ]; then
PROFILE=(--profile "$PROFILE")
else
PROFILE=()
fi
if [ -n "$HOSTTYPE" -a "$HOSTTYPE" != "--" ]; then
HOSTTYPE=(--hosttype "$HOSTTYPE")
else
HOSTTYPE=()
fi
_ARGS=()
for r in $ARGS; do
_ARGS+=("$r")
done
export WHITEBOARD="$BUILD_URL"
python -u \
"$DIR"/bkr.py submit -v -v \
-J \
--var "WHITEBOARD=Test NetworkManager $BUILD_URL" \
"${RPM[@]}" \
"${BUILD_ID[@]}" \
--var "ARCH=$ARCH" \
--var "RESERVE=$RESERVE" \
--var "SELINUX=$SELINUX" \
"${PROFILE[@]}" \
"${HOSTTYPE[@]}" \
--var "TESTS=$TESTS" \
--bkr-write-job-id 'beaker_job_id' \
--bkr-wait-completion \
--bkr-job-results 'results.txt' \
--no-test \
"${_ARGS[@]}"