From 517e901b983698bf5bf5021fce601fdaa6f2ec49 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 12 Nov 2015 18:33:22 +0100 Subject: [PATCH] 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 --- contrib/rh-bkr/bkr.py | 19 +++++++---- contrib/rh-bkr/jenkins.sh | 67 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 7 deletions(-) create mode 100755 contrib/rh-bkr/jenkins.sh diff --git a/contrib/rh-bkr/bkr.py b/contrib/rh-bkr/bkr.py index efb9bc96ca..e47e05dece 100755 --- a/contrib/rh-bkr/bkr.py +++ b/contrib/rh-bkr/bkr.py @@ -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 '' + return '' % (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 '' diff --git a/contrib/rh-bkr/jenkins.sh b/contrib/rh-bkr/jenkins.sh new file mode 100755 index 0000000000..5b4e6b4705 --- /dev/null +++ b/contrib/rh-bkr/jenkins.sh @@ -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[@]}" +