Beispiel #1
0
class JenkinsAPI(object):
    def __init__(self):
        self.__server = Jenkins(settings.JENKINS.get('URI'))

    def get_all_jobs(self):
        return self.__server.get_all_jobs()

    def get_next_build_number(self, name):
        return self.__server.get_job_info(name)['nextBuildNumber']

    def build_job(self, name, parameters=None):
        return self.__server.build_job(name=name, parameters=parameters)

    def get_build_info(self, name, build_number):
        try:
            return self.__server.get_build_info(name, build_number)
        except Exception as e:
            logger.exception(e)
            return None

    def get_build_console_output(self, name, number):
        try:
            return self.__server.get_build_console_output(name, number)
        except JenkinsException as e:
            logger.exception(e)
            return None

    def download_package(self, package_url, name, build_number):
        URI = settings.JENKINS.get('URI')
        download_url = '{}/job/{}/{}/artifact/{}'.format(
            URI, name, build_number, package_url)
        logger.debug(download_url)
        local_filename = download_url.split('/')[-1]
        code_path = os.path.join(settings.DEPLOY.get('CODE_PATH'), 'packages')
        local_full_filename = os.path.join(code_path, local_filename)

        # with requests.get(url, stream=True,
        # auth=HTTPBasicAuth("zhoujinliang", "117c911a35acf51e428e29f3ccb363f53f")) as r:
        with requests.get(download_url, stream=True) as r:
            r.raise_for_status()
            with open(local_full_filename, 'wb') as f:
                for chunk in r.iter_content(chunk_size=8192):
                    if chunk:  # filter out keep-alive new chunks
                        f.write(chunk)
        return local_full_filename

    def cancel_build(self, name, queue_id, build_number):
        try:
            self.__server.cancel_queue(queue_id)
            self.__server.stop_build(name, build_number)
        except Exception as e:
            logger.error(e)

    def test(self):
        return self.__server.cancel_queue(3590)
        # # return self.__server.stop_build('devops', 98)
        return self.__server.get_queue_info()
Beispiel #2
0
        conn.commit()
    except sqlite3.OperationalError:
        print("Table exits ... ")
    return conn


def save_jobs(jobs, conn):
    """
    Recieves a list of jenkins jobs as a list and saves them in a sqlite3 db.
    """
    for job in jobs:
        print job
        conn.execute('''INSERT INTO jenkins_jobs VALUES (?,?,?,?)''',
                     [job["name"], job["color"], job["url"],
                      datetime.now()])

    conn.commit()


conn = create_db()
if __name__ == "__main__":
    #connect to jenkins instance
    password = getpass("Enter use password ")
    remote_jenkins = Jenkins(args.url,
                             username=args.username,
                             password=password)

    #retrive jobs from server
    jobs = remote_jenkins.get_all_jobs()
    save_jobs(jobs, conn)
    conn.close()
Beispiel #3
0
import sys

from jenkins import Jenkins

j = Jenkins(url='http://sola.local:8080',
            username='******',
            password='******')

w = j.get_whoami()

print(w)

jobs = j.get_all_jobs()

for j in jobs:
    # print(j['name'] + ' --> ' + j['fullname'])
    print(j['fullname'])
Beispiel #4
0
# -*- coding: utf-8 -*-
# @Time    : 2019-07-26 20:23
# @Author  : Eylaine
# @File    : __init__.py

from jenkins import Jenkins

from settings import JENKINS_URL as URL
from settings import JENKINS_PASSWORD as PASSWORD
from settings import JENKINS_USERNAME as USERNAME
from settings import JENKINS_JOB_NAME as JOB_NAME
"""python-jenkins模块的使用和常用方法"""
jenkins = Jenkins(URL, USERNAME, PASSWORD)

# 获取所有的jobs
all_jobs = jenkins.get_all_jobs()

# 根据job name获取info,返回json
job_info = jenkins.get_job_info(JOB_NAME)

# 最后一次build的信息,包含num和url
last_build = job_info["lastBuild"]
# 最后一次build的number,int类型
NUMBER = last_build["number"]

build_info = jenkins.get_build_info(JOB_NAME, NUMBER)
info = jenkins.get_info()

# 运行日志
console_text = jenkins.get_build_console_output(JOB_NAME, NUMBER)
from os import path
from jenkins import Jenkins
import getpass
import xml.etree.ElementTree as ET

jenkins = {
    'login': input('User: '******'password': getpass.getpass(prompt='Password: '******'path': input('Folder to backup: '),
    'server': input('Jenkins server: ')
}

server = Jenkins(jenkins['server'],
                 username=jenkins['login'],
                 password=jenkins['password'])

for job in server.get_all_jobs():
    if 'api-team' in job['fullname']:
        script_name = path.join(jenkins['path'], job['fullname'] + '.groovy')
        conf = server.get_job_config(job['fullname'])

        try:
            root = ET.fromstring(conf)
            script_code = root.find("./definition/script").text
            print('Saving script: %s' % script_name)
            fl = open(script_name, 'w')
            fl.write(script_code)
            fl.close()
        except:
            print('can not parse %s' % job['name'])
def main():
    parser = ArgumentParser()
    parser.add_argument('-l', '--list-something', action='store_true')
    parser.add_argument('-s', '--sync', action='store_true')
    parser.add_argument('-r', '--reconfig', action='store_true')
    parser.add_argument('-n', '--dry_run', action='store_true')

    args = parser.parse_args()

    japi = Jenkins(jenkins_host, username=jenkins_user, password=jenkins_pass)
    all_jobs = set([x['name'] for x in japi.get_all_jobs()])

    # list of jobs we don't want to touch
    exceptions = [
        'jenkins-debian-glue',
        'leste-image-virtual',
        'leste-image-n900',
        'leste-image-droid4',
        'leste-image-pinephone',
        'leste-image-pinetab',
        'leste-image-raspi3-64bit',
        'leste-image-raspi4-64bit',
        'leste-image-raspi2',
        'leste-image-arm64-generic',
        'leste-image-turbox-twister',
        'leste-image-olimex-lime2',
    ]

    jobs = get_jobs()

    if args.sync and args.reconfig:
        print('Can not sync and reconfig. Choose one.')
        return

    if args.reconfig:
        for j in jobs:
            if j in exceptions:
                continue
            if args.dry_run:
                print('WOULD RECONFIG:', j)
                continue
            print('Reconfiguring job:', j)
            reconfig_jobs(japi, jobs, j)
        return

    if args.sync:
        source_bin_jobs = [(key + '-source', key+'-binaries') for key in jobs.keys()]
        config_jobs = []
        for (source, bina) in source_bin_jobs:
            config_jobs.append(source)
            config_jobs.append(bina)

        all_config_jobs = set(config_jobs)

        jobs_to_remove = all_jobs - all_config_jobs
        jobs_to_add = all_config_jobs - all_jobs

        def filter_jobs(jobs):
            return list(map(lambda x: x[:-len('-source')], filter(lambda x: x.endswith('-source'), jobs)))

        for j in filter_jobs(jobs_to_remove):
            if j in exceptions:
                continue
            if args.dry_run:
                print('WOULD REMOVE:', j)
                continue
            print('Deleting job:', j)
            del_jobs(japi, jobs, j)

        for j in filter_jobs(jobs_to_add):
            if j in exceptions:
                continue
            if args.dry_run:
                print('WOULD ADD:', j)
                continue
            print('Adding job:', j)
            add_jobs(japi, jobs, j)