Advertisement
Guest User

Untitled

a guest
Nov 13th, 2016
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.57 KB | None | 0 0
  1. from jenkinsapi.jenkins import Jenkins
import calendarfrom datetime import datetime, timedelta
import time

ERROR_OCCURRED = 'Sorry, but an error has occurred :('
JOB_ALREADY_ENABLED = 'Job is already enabled!'
JOB_ALREADY_DISABLED = 'Job is already disabled!'
JOB_NOW_ENABLED = 'Job is now enabled'
JOB_NOW_DISABLED = 'Job is now disabled'
JOB_DISABLED = 'Job is disabled'
JOB_NOT_RUNNING = 'There is no job that is currently running...'
NO_SUCH_JOB_NAME = 'There is no job with that name'


def getServerInstance():
    return Jenkins('http://jenkins-test/', username='jacobk', password='Qwer1234')


def valitade_job_name(jobName, server):
    status = None
    isExists = True

    if not server.has_job(jobName):
        status = NO_SUCH_JOB_NAME
        isExists = False

    return status, isExists


def enable_job(params):
    jobName = params[0]
    server = getServerInstance()
    status, isExist = valitade_job_name(jobName, server)

    if isExist:
        job_instance = server.get_job(jobName)
        if job_instance.is_enabled():
            status = JOB_ALREADY_ENABLED
        else:
            job_instance.enable()
            if job_instance.is_enabled():
                status = JOB_NOW_ENABLED
            else:
                status = ERROR_OCCURRED

    return status


def disable_job(params):
    jobName = params[0]
    server = getServerInstance()
    status, isExist = valitade_job_name(jobName, server)

    if isExist:
        job_instance = server.get_job(jobName)

        if not job_instance.is_enabled():
            status = JOB_ALREADY_DISABLED
        else:
            job_instance.disable()
            if not job_instance.is_enabled():
                status = JOB_NOW_DISABLED
            else:
                status = ERROR_OCCURRED

    return status


def start_job(params):
    jobName = params[0]
    server = getServerInstance()
    status, isExist = valitade_job_name(jobName, server)
    parameters = None

    if isExist:
        job_instance = server.get_job(jobName)
        isActualBuild = False
        if job_instance.is_enabled():
            lastBuild = job_instance.get_last_build()
            status = 'Job: ' + jobName + ' #' + str(lastBuild.get_number())

            if lastBuild.is_running():
                status += ' is still running!'
            else:
                if len(params) > 0:
                    parameters = {}
                    jobParameters = get_job_params([jobName])
                    for i in range(1, len(params[1:]) + 1):
                        parameters[jobParameters[i - 1]] = params[i]

                server.build_job(jobName, parameters)
                while not isActualBuild:
                    time.sleep(1)
                    currentBuild = job_instance.get_last_build()
                    if not currentBuild == lastBuild:
                        status += ' started at ' + str(utc_to_local(currentBuild.get_timestamp())) + '\nBuild URL: ' + currentBuild.get_result_url()
                        isActualBuild = True
        else:
            status = JOB_DISABLED

    print status
    return status


def get_job_params(params):
    jobName = params[0]
    server = getServerInstance()
    status, isExist = valitade_job_name(jobName, server)

    if isExist:
        status = ''
        job_instance = server.get_job(jobName)
        parameters = job_instance.get_params_list()
        for i in range(0, len(parameters)):
            status += 'Parameter #' + str(i + 1) + ': ' + parameters[i] + '\n'

    return status


def get_job_description(params):
    jobName = params[0]
    server = getServerInstance()
    status, isExist = valitade_job_name(jobName, server)

    if isExist:
        job_instance = server.get_job(jobName)
        status = job_instance.get_description()

    return status


def stop_job(params):
    jobName = params[0]
    server = getServerInstance()
    status, isExist = valitade_job_name(jobName, server)

    if isExist:
        job_instance = server.get_job(jobName)
        lastBuild = job_instance.get_last_build()
        if lastBuild.is_running():
            lastBuild.stop()
            time.sleep(2)
            if not lastBuild.is_running():
                status = 'Job: ' + jobName + ' #' + str(lastBuild.get_number()) + ' has been stopped'
            else:
                status = ERROR_OCCURRED
        else:
            status = JOB_NOT_RUNNING

    return status


def status_job(params):
    global lastBuild, lastFailedBuild, lastSuccessfullBuild, buildNumber
    buildNumber = None
    jobName = params[0]

    if len(params) > 1:
        buildNumber = int(params[1])
    server = getServerInstance()
    status, isExist = valitade_job_name(jobName, server)

    if isExist:
        job_instance = server.get_job(jobName)
        if buildNumber is not None:
            lastBuild = job_instance.get_build(buildNumber)
            status = 'Job: ' + jobName + ' #' + str(lastBuild.get_number())
            if lastBuild.is_running():
                 status += ' is running'
            else:
                status += ' finished with status: ' +  lastBuild.get_status()
        else:
            lastBuild = job_instance.get_last_build();
            lastFailedBuild = job_instance.get_build(job_instance.get_last_failed_buildnumber())
            lastSuccessfullBuild = job_instance.get_build(job_instance.get_last_good_buildnumber())

            status = 'For job: ' + jobName + '\nLast build #' + str(lastBuild.get_number())

            if lastBuild.is_running():
                status += ' is running'
            else:
                status += ' finished with status: ' + lastBuild.get_status()
            status += '\nLast failed build: #' + str(lastFailedBuild.get_number()) + ' started at ' + str(utc_to_local(lastFailedBuild.get_timestamp()));
            status += '\nLast Successful build: #' + str(lastSuccessfullBuild.get_number()) + ' started at ' + str(utc_to_local(lastSuccessfullBuild.get_timestamp()));

    print status
    return status


def utc_to_local(utc_dt):
    # get integer timestamp to avoid precision lost
    timestamp = calendar.timegm(utc_dt.timetuple())
    local_dt = datetime.fromtimestamp(timestamp)
    assert utc_dt.resolution >= timedelta(microseconds=1)
    return local_dt.replace(microsecond=utc_dt.microsecond)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement