diff --git a/pagure/lib/lib_ci.py b/pagure/lib/lib_ci.py index f87e4a4..bba8d1e 100644 --- a/pagure/lib/lib_ci.py +++ b/pagure/lib/lib_ci.py @@ -11,14 +11,16 @@ """ # pylint: disable=too-many-locals - +import logging import pagure.exceptions import pagure.lib # This import is needed as pagure.lib relies on Project.ci_hook to be # defined and accessible and this happens in pagure.hooks.pagure_ci from pagure.hooks import pagure_ci # noqa: E402,F401 +from pagure.config import config as pagure_config +_log = logging.getLogger(__name__) BUILD_STATS = { 'SUCCESS': ('Build successful', 100), @@ -81,3 +83,49 @@ def process_jenkins_build(session, project, build_id, requestfolder): requestfolder=requestfolder, ) session.commit() + + +def trigger_jenkins_build(project_name, branch, pr_id): + """ Trigger a build on a jenkins instance.""" + try: + import jenkins + except ImportError: + _log.error( + 'Pagure-CI: Failed to load the jenkins module, bailing') + return + + session = pagure.lib.create_session(pagure_config['DB_URL']) + _log.info('Jenkins CI') + + project = pagure.lib.get_authorized_project(session, project_name) + + repo = '%s/%s' % ( + pagure_config['GIT_URL_GIT'].rstrip('/'), + project.path) + + url = project.ci_hook.ci_url.rstrip('/') + # Jenkins Base URL + base_url, name = url.split('/job/', 1) + jenkins_name = name.rstrip('/').replace('/job/', '/') + + data = { + 'cause': pr_id, + 'REPO': repo, + 'BRANCH': branch + } + + server = jenkins.Jenkins(base_url) + _log.info('Pagure-CI: Triggering at: %s for: %s - data: %s' % ( + base_url, jenkins_name, data)) + try: + server.build_job( + name=jenkins_name, + parameters=data, + token=project.ci_hook.pagure_ci_token + ) + _log.info('Pagure-CI: Build triggered') + except Exception as err: + _log.info('Pagure-CI:An error occured: %s', err) + session.close() + + session.close() diff --git a/pagure/lib/tasks_services.py b/pagure/lib/tasks_services.py index 5ef7a80..3661cd1 100644 --- a/pagure/lib/tasks_services.py +++ b/pagure/lib/tasks_services.py @@ -29,7 +29,7 @@ import pagure.lib from pagure.config import config as pagure_config from pagure.lib.tasks import pagure_task from pagure.mail_logging import format_callstack - +from pagure.lib.lib_ci import trigger_jenkins_build # logging.config.dictConfig(pagure_config.get('LOGGING') or {'version': 1}) _log = logging.getLogger(__name__) @@ -354,43 +354,8 @@ def trigger_ci_build(self, session, pr_uid, pr_id, branch, ci_type): request.project.fullname, pr_id, request.project_from.fullname, branch) - url = request.project.ci_hook.ci_url.rstrip('/') - if ci_type == 'jenkins': - try: - import jenkins - except ImportError: - _log.error( - 'Pagure-CI: Failed to load the jenkins module, bailing') - return - - _log.info('Jenkins CI') - repo = '%s/%s' % ( - pagure_config['GIT_URL_GIT'].rstrip('/'), - request.project_from.path) - - # Jenkins Base URL - base_url, name = url.split('/job/', 1) - jenkins_name = name.rstrip('/').replace('/job/', '/') - - data = { - 'cause': pr_id, - 'REPO': repo, - 'BRANCH': branch - } - - server = jenkins.Jenkins(base_url) - _log.info('Pagure-CI: Triggering at: %s for: %s - data: %s' % ( - base_url, jenkins_name, data)) - try: - server.build_job( - name=jenkins_name, - parameters=data, - token=request.project.ci_hook.pagure_ci_token - ) - _log.info('Pagure-CI: Build triggered') - except Exception as err: - _log.info('Pagure-CI:An error occured: %s', err) + trigger_jenkins_build(request.project.fullname, branch, pr_id) else: _log.warning('Pagure-CI:Un-supported CI type')