diff options
author | Ed Bartosh <eduard.bartosh@intel.com> | 2015-02-01 12:01:55 +0200 |
---|---|---|
committer | Ed Bartosh <eduard.bartosh@intel.com> | 2015-02-03 13:52:10 +0200 |
commit | cb263aceee9e200e62a1c59996bae813590ea049 (patch) | |
tree | 2f65b07bb581168eea9e7054d9f1ce221355986b | |
parent | 223f161bba1a6568e08540f554450a4550c76fac (diff) | |
download | repa-cb263aceee9e200e62a1c59996bae813590ea049.tar.gz repa-cb263aceee9e200e62a1c59996bae813590ea049.tar.bz2 repa-cb263aceee9e200e62a1c59996bae813590ea049.zip |
Implement interface to Jenkins
Implemented trigger_build function using 3rd party jenkinsapi. This
function will be used for rebuild, remove and lock/unlock functionality.
Change-Id: Idf55f4ed3c8dee51bdb51719fa338d68867b7b25
Signed-off-by: Ed Bartosh <eduard.bartosh@intel.com>
-rw-r--r-- | debian/control | 1 | ||||
-rw-r--r-- | packaging/repa.spec | 1 | ||||
-rw-r--r-- | repa.1 | 11 | ||||
-rw-r--r-- | repa/jenkins.py | 62 | ||||
-rwxr-xr-x | repa/main.py | 3 |
5 files changed, 76 insertions, 2 deletions
diff --git a/debian/control b/debian/control index 79738f9..1563322 100644 --- a/debian/control +++ b/debian/control @@ -14,6 +14,7 @@ Depends: python (>=2.6), osc, gbs-api, python-setuptools, + python-jenkinsapi, ${misc:Depends}, ${python:Depends} Description: tool to help release engineers to maintain code submissions diff --git a/packaging/repa.spec b/packaging/repa.spec index 75d62a9..67fa065 100644 --- a/packaging/repa.spec +++ b/packaging/repa.spec @@ -18,6 +18,7 @@ Requires: gbs-api Requires: osc Requires: python >= 2.6 Requires: python-setuptools +Requires: python-jenkinsapi %description This tool is to assist release engineers to operate with submissions @@ -382,6 +382,15 @@ apiuser = your_user_name apipasswd = your_password .RE .RS 2 +jenkins_url = https://build.tizen.org/robot +.RE +.RS 2 +jenkins_user = your_jenkins_user_name +.RE +.RS 2 +jenkins_passwd = your_jenkins_password +.RE +.RS 2 processes = 20 .RE .RS 2 @@ -405,7 +414,7 @@ noaggregate = mic-bootstrap-x86-arm.rpm|mic-bootstrap.rpm|mic-bootstrap-debugsou .RS 2 -Mandatory options: apiurl, apiuser, apipasswd and project +Mandatory options: apiurl, apiuser, apipasswd, jenkins_url, jenkins_user, jenkins_passwd and project .RE .RS 2 diff --git a/repa/jenkins.py b/repa/jenkins.py new file mode 100644 index 0000000..29759e8 --- /dev/null +++ b/repa/jenkins.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# +# This file is part of REPA: Release Engineering Process Assistant. +# +# Copyright (C) 2015 Intel Corporation +# +# REPA is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# version 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301, USA. + +""" +REPA: Release Engineering Process Assistant. + +Copyright (C) Intel Corporation 2015 +Licence: GPL version 2 +Author: Ed Bartosh <eduard.bartosh@intel.com> + +Jenkins module. Triggering Jenkins builds. +""" + +from jenkinsapi.jenkins import Jenkins +from requests import HTTPError, ConnectionError + +class JenkinsError(Exception): + """Local exception.""" + pass + +def trigger_build(job, parameters, cred, block=True): + """ + Trigger Jenkins build. + + :param job: job name + :type job: string + :param parameters: job parameters + :type parameters: dictionary + :param cred: credentials + :type cred: named tuple cred.url, cred.username, cred.password + :param block: block the call until build is finished + :type block: bool + :returns: build number, build status, console output + """ + try: + jenkins = Jenkins(cred.url, cred.username, cred.password) + except (HTTPError, ConnectionError) as error: + raise JenkinsError("Can't connect to jenkins: %s" % str(error)) + + if job not in jenkins: + raise JenkinsError("Job %s doesn't exist" % job) + + qitem = jenkins[job].invoke(block=block, build_params=parameters) + build = qitem.get_build() + return build.get_number(), build.get_status(), build.get_console() diff --git a/repa/main.py b/repa/main.py index 44680cc..39f42ec 100755 --- a/repa/main.py +++ b/repa/main.py @@ -83,7 +83,8 @@ def parse_args(argv): def read_config(paths=('/etc/repa.conf', expanduser('~/.repa.conf')), section='general', - mandatory=('apiurl', 'apiuser', 'apipasswd', 'project')): + mandatory=('apiurl', 'apiuser', 'apipasswd', 'project', + 'jenkins_url', 'jenkins_user', 'jenkins_passwd')): """ Read repa config. Configuration is read from the set of files provided. |