def paasta_push_to_registry(args): """Upload a docker image to a registry""" service = args.service if service and service.startswith('services-'): service = service.split('services-', 1)[1] validate_service_name(service) cmd = build_command(service, args.commit) loglines = [] returncode, output = _run( cmd, timeout=3600, log=True, component='build', service=service, loglevel='debug' ) if returncode != 0: loglines.append('ERROR: Failed to promote image for %s.' % args.commit) output = get_jenkins_build_output_url() if output: loglines.append('See output: %s' % output) else: loglines.append('Successfully pushed image for %s to registry' % args.commit) for logline in loglines: _log( service=service, line=logline, component='build', level='event', ) sys.exit(returncode)
def paasta_itest(args): """Build and test a docker image""" service = args.service if service and service.startswith("services-"): service = service.split("services-", 1)[1] validate_service_name(service) tag = build_docker_tag(service, args.commit) run_env = os.environ.copy() run_env["DOCKER_TAG"] = tag cmd = "make itest" loglines = [] _log(service=service, line="starting itest for %s." % args.commit, component="build", level="event") returncode, output = _run( cmd, env=run_env, timeout=3600, log=True, component="build", service=service, loglevel="debug" ) if returncode != 0: loglines.append("ERROR: itest failed for %s." % args.commit) output = get_jenkins_build_output_url() if output: loglines.append("See output: %s" % output) else: loglines.append("itest passed for %s." % args.commit) if not check_docker_image(service, args.commit): loglines.append("ERROR: itest has not created %s" % tag) returncode = 1 for logline in loglines: _log(service=service, line=logline, component="build", level="event") sys.exit(returncode)
def service_dir_check(service): """Check whether directory service exists in /nail/etc/services :param service: string of service name we wish to inspect """ try: validate_service_name(service) print PaastaCheckMessages.service_dir_found(service) except NoSuchService: print PaastaCheckMessages.service_dir_missing(service)
def service_dir_check(service): """Check whether directory service exists in /nail/etc/services :param service: string of service name we wish to inspect """ try: validate_service_name(service) print PaastaCheckMessages.service_dir_found(service) except NoSuchService: print PaastaCheckMessages.service_dir_missing(service)
def paasta_generate_pipeline(args): """Generate a Jenkins build pipeline. :param args: argparse.Namespace obj created from sys.args by paasta_cli""" service = args.service or guess_service_name() try: validate_service_name(service) except NoSuchService as service_not_found: print service_not_found sys.exit(1) generate_pipeline(service=service)
def paasta_generate_pipeline(args): """Generate a Jenkins build pipeline. :param args: argparse.Namespace obj created from sys.args by paasta_cli""" service = args.service or guess_service_name() try: validate_service_name(service) except NoSuchService as service_not_found: print service_not_found sys.exit(1) generate_pipeline(service=service)
def paasta_mark_for_deployment(args): """Wrapping mark_for_deployment""" cluster, instance = args.clusterinstance.split('.') service = args.service if service and service.startswith('services-'): service = service.split('services-', 1)[1] validate_service_name(service) returncode = mark_for_deployment(git_url=args.git_url, cluster=cluster, instance=instance, service=service, commit=args.commit) sys.exit(returncode)
def paasta_mark_for_deployment(args): """Wrapping mark_for_deployment""" cluster, instance = args.clusterinstance.split('.') service = args.service if service and service.startswith('services-'): service = service.split('services-', 1)[1] validate_service_name(service) returncode = mark_for_deployment( git_url=args.git_url, cluster=cluster, instance=instance, service=service, commit=args.commit ) sys.exit(returncode)
def paasta_cook_image(args, service=None, soa_dir=None): """Build a docker image""" if service: service = service else: service = args.service if service and service.startswith('services-'): service = service.split('services-', 1)[1] validate_service_name(service, soa_dir) run_env = os.environ.copy() default_tag = 'paasta-cook-image-%s-%s' % (service, get_username()) tag = run_env.get('DOCKER_TAG', default_tag) run_env['DOCKER_TAG'] = tag if not makefile_responds_to('cook-image'): sys.stderr.write('ERROR: local-run now requires a cook-image target to be present in the Makefile. See ' 'http://y/paasta-contract and PAASTA-601 for more details.\n') sys.exit(1) try: cmd = 'make cook-image' returncode, output = _run( cmd, env=run_env, log=True, component='build', service=service, loglevel='debug' ) if returncode != 0: _log( service=service, line='ERROR: make cook-image failed for %s.' % service, component='build', level='event', ) sys.exit(returncode) except KeyboardInterrupt: sys.stderr.write('\nProcess interrupted by the user. Cancelling.\n') sys.exit(2)
def paasta_itest(args): """Build and test a docker image""" service = args.service if service and service.startswith('services-'): service = service.split('services-', 1)[1] validate_service_name(service) tag = build_docker_tag(service, args.commit) run_env = os.environ.copy() run_env['DOCKER_TAG'] = tag cmd = "make itest" loglines = [] _log(service=service, line='starting itest for %s.' % args.commit, component='build', level='event') returncode, output = _run(cmd, env=run_env, timeout=3600, log=True, component='build', service=service, loglevel='debug') if returncode != 0: loglines.append('ERROR: itest failed for %s.' % args.commit) output = get_jenkins_build_output_url() if output: loglines.append('See output: %s' % output) else: loglines.append('itest passed for %s.' % args.commit) if not check_docker_image(service, args.commit): loglines.append('ERROR: itest has not created %s' % tag) returncode = 1 for logline in loglines: _log( service=service, line=logline, component='build', level='event', ) sys.exit(returncode)
def paasta_cook_image(args, service=None, soa_dir=None): """Build a docker image""" if service: service = service else: service = args.service if service and service.startswith('services-'): service = service.split('services-', 1)[1] validate_service_name(service, soa_dir) run_env = os.environ.copy() default_tag = 'paasta-cook-image-%s-%s' % (service, get_username()) tag = run_env.get('DOCKER_TAG', default_tag) run_env['DOCKER_TAG'] = tag if not makefile_responds_to('cook-image'): sys.stderr.write( 'ERROR: local-run now requires a cook-image target to be present in the Makefile. See ' 'http://y/paasta-contract and PAASTA-601 for more details.\n') sys.exit(1) try: cmd = 'make cook-image' returncode, output = _run(cmd, env=run_env, log=True, component='build', service=service, loglevel='debug') if returncode != 0: _log( service=service, line='ERROR: make cook-image failed for %s.' % service, component='build', level='event', ) sys.exit(returncode) except KeyboardInterrupt: sys.stderr.write('\nProcess interrupted by the user. Cancelling.\n') sys.exit(2)
def paasta_mark_for_deployment(args): """Mark a docker image for deployment""" service = args.service if service and service.startswith('services-'): service = service.split('services-', 1)[1] validate_service_name(service) cmd = build_command(args.git_url, args.commit, args.clusterinstance) # Clusterinstance should be in cluster.instance format cluster, instance = args.clusterinstance.split('.') returncode, output = _run( cmd, timeout=30, ) loglines = get_loglines(returncode=returncode, cmd=cmd, output=output, args=args) for logline in loglines: _log( service=service, line=logline, component='deploy', level='event', cluster=cluster, instance=instance, ) sys.exit(returncode)