Beispiel #1
0
def run(ctx, job_name, params, follow):
    """Start a build job"""
    parameters = {'dummy': ''}
    for p in params:
        p = p.split('=')
        parameters[p[0]] = p[1]
    last_build_number = get_latest_build_number(job_name)
    if last_build_number:
        server().build_job(job_name, parameters=parameters)
    else:
        server().build_job(job_name)
    click.echo('submitted')
    if not follow:
        return

    click.echo('waiting for start of the job.', nl=False)
    while True:
        time.sleep(2)
        click.echo('.', nl=False)
        # note: it's possible next job is not the submitted one above.
        build_number = get_latest_build_number(job_name, no_message=True)
        if build_number > last_build_number:
            break

    ctx.invoke(log, job_name=job_name, build_number=build_number, follow=True)
Beispiel #2
0
def log(job_name, build_number, follow):
    """Get Log"""
    if not build_number:
        build_number = get_latest_build_number(job_name)
    if follow:
        _streaming_log(job_name, build_number)
    else:
        click.echo(server().get_build_console_output(job_name, build_number))
Beispiel #3
0
def get_latest_build_number(job_name, no_message=False):
    if not no_message:
        click.echo('looking up the latest build number...\n')
    job = server().get_job_info(job_name)
    if job and job.get('lastBuild', None):
        return job['lastBuild']['number']
    else:
        return 0
Beispiel #4
0
def list():
    """List Executor"""
    for node in server().get_nodes(depth=2):
        node_name = '(master)' if node['name'] == 'master' else node['name']
        node_info = server().get_node_info(node_name, depth=2)
        for executor in sorted(node_info['executors'],
                               key=lambda x: x['number']):
            displayname = executor.get('currentExecutable')
            if displayname:
                displayname = displayname.get('displayName')
            elif node['offline']:
                displayname = 'offline'
            else:
                displayname = 'idle'
            executor_name = "{} ({})".format(node['name'],
                                             executor['number'] + 1)
            click.echo('{:15} {}'.format(executor_name, displayname))
Beispiel #5
0
def info(job_name):
    """Show Job Info"""
    job = server().get_job_info(job_name)

    if 'jobs' in job:
        for j in job['jobs']:
            console.print_job(j)
    else:
        console.print_job(job)
Beispiel #6
0
def list(depth, prefix):
    """List Jobs"""
    jobs = server().get_jobs(folder_depth=depth)
    if prefix:
        import builtins
        jobs = builtins.list(
            filter(lambda x: x['fullname'].startswith(prefix), jobs))
    if len(jobs) == 0:
        click.echo('job is not found')
        sys.exit(1)
    console.print_jobs(jobs)
Beispiel #7
0
def params(ctx, args, incomplete):
    job_name = args[2]
    job = server().get_job_info(job_name)
    params = []
    for prop in job["property"]:
        if prop['_class'] == 'hudson.model.ParametersDefinitionProperty':
            for param in prop['parameterDefinitions']:
                params = params + [("{}={}".format(
                    param['defaultParameterValue']['name'],
                    param['defaultParameterValue']['value']),
                                    param['description'])]

    return params
Beispiel #8
0
def _streaming_log(job_name, build_number):
    start = 0
    while True:
        res = server().get_build_progressive_console_output(job_name,
                                                            build_number,
                                                            start=start)
        if start != res['size']:
            click.echo(res['output'].strip())
        logger.debug(
            'got console output: more={}, start={}, next_start={}'.format(
                res['more'], start, res['size']))
        time.sleep(2)
        if res['more']:
            start = res['size']
        else:
            break
Beispiel #9
0
def validate(jenkinsfile):
    """Validate Jenkinsfile"""
    logger.debug('validating {}...'.format(jenkinsfile.name))
    response = server().check_jenkinsfile_syntax(jenkinsfile.read())
    logger.debug('response: {}'.format(response))
    if len(response) == 0:
        click.echo("Jenkinsfile successfully validated.")
    else:
        for r in response:
            if 'error' in r:
                if type(r['error']) == str:
                    click.echo(r['error'])
                elif type(r['error']) == list:
                    for err in r['error']:
                        click.echo(err)
                else:
                    logger.error("unexpected response form: {}".format(r))
Beispiel #10
0
def install(name):
    """Install Plugin"""
    server().install_plugin(name)
Beispiel #11
0
def list(depth):
    """List Plugins"""
    console.print_plugins(server().get_plugins(depth=depth))
Beispiel #12
0
def info(job_name, build_number):
    """Show Build Info"""
    if not build_number:
        build_number = get_latest_build_number(job_name)
    build = server().get_build_info(job_name, build_number)
    console.print_build(build)
Beispiel #13
0
def stop(job_name, build_number):
    """Stop a build job"""
    if not build_number:
        build_number = get_latest_build_number(job_name)
    server().stop_build(job_name, build_number)
Beispiel #14
0
def builds(ctx, args, incomplete):
    job_name = args[2]
    return [(build['number'])
            for build in server().get_job_info(job_name)['builds']]
Beispiel #15
0
def jobs(ctx, args, incomplete):
    return [(job['fullname']) for job in server().get_jobs(folder_depth=4)
            if job['fullname'].startswith(incomplete)]