예제 #1
0
 def update_jenkins(self, settings):
     self.settings = settings
     self.jenkins = Jenkins(self.settings.host,
                            proxies=self.settings.proxies,
                            auth=self.settings.auth,
                            verify_ssl_cert=self.settings.ssl_verification)
예제 #2
0
class JenkinsWrapper(object):

    '''
    classdocs
    '''
    settings = None
    jenkins = None

    def __init__(self, settings):
        '''
        Constructor
        '''
        self.settings = settings
        self.update_jenkins(self.settings)

    def update_jenkins(self, settings):
        self.settings = settings
        self.jenkins = Jenkins(self.settings.host,
                               proxies=self.settings.proxies,
                               auth=self.settings.auth,
                               verify_ssl_cert=self.settings.ssl_verification)

    def get_detailed_joblist(self, status_function):

        status_function("Fetching complete joblist... (this may take a while)")
        jobs = {a_job: self.jenkins.job_info(a_job) for (a_job, _) in self.jenkins.all_jobs()}

        jobs = collections.OrderedDict(sorted(jobs.items(), key=lambda t: t[0]))

        # return {a_job: self.jenkins.job_info(a_job) for (a_job, _) in self.jenkins.all_jobs()}
        # set the 'info' field of each build to None
        for v in jobs.values():
            for b in v['builds']:
                b['info'] = None

        keyword_list = ('lastBuild', 'lastFailedBuild', 'lastCompletedBuild', 'lastStableBuild', 'lastSuccessfulBuild', 'lastUnstableBuild', 'lastUnsuccessfulBuild')

        total_jobs = len(jobs.keys())
        for i, (a_job, a_info) in enumerate(jobs.iteritems()):
            status_function("Processing job {} of {}".format(i + 1, total_jobs))
            #             print "    ...", a_job
            build_ids_to_fetch = []

            # create a list of builds to fetch for the current job. ignores duplicates.
            for keyword in keyword_list:
                # could be None!
                last_X_build_number = a_info[keyword]
                if last_X_build_number:
                    # add if not already there
                    if last_X_build_number['number'] not in build_ids_to_fetch:
                        build_ids_to_fetch.append(last_X_build_number['number'])

            # create a dict of {index:build_id} for the above identified builds
            last_X_index = {a_info['builds'].index(j): j['number'] for j in a_info['builds'] if j['number'] in build_ids_to_fetch}

            # actually query Jenkins for the identified builds and store in the big dict as 'info'
            for a_dict_index, a_build_id in last_X_index.iteritems():
                jobs[a_job]['builds'][a_dict_index]['info'] = self.jenkins.build_info(a_job, build_number=a_build_id)

        status_function("Finished loading of {} jobs!".format(total_jobs))
        return jobs

    def get_jobs_details(self, job_name):
        return self.jenkins.job_info(job_name)

    def get_last_build_log(self, job_name):
        return self.jenkins.last_build_console(job_name)

    def jenkins_build(self, job_name):
        return self.jenkins.build(job_name)

    def get_job_details(self, job_name):
        pass