import os import time import jenkins import requests import tenacity from ssavva.amazon_unlimited.backfilling import config, exceptions _server = jenkins.Jenkins( 'http://jenkins.theorchard.com:8080', username=os.environ.get('jenkins_user'), password=os.environ.get('jenkins_password')) def build_job(name, params): return _server.build_job(name=name, parameters=params) def wait_for_build(job_name, queue_number, sleep=30): r = _server.get_queue_item(queue_number) while r['why']: time.sleep(1) r = _server.get_queue_item(queue_number) execution_number = r['executable']['number'] status = _server.get_build_info(job_name, execution_number)['result'] while True: if status == 'SUCCESS': return True elif status == 'FAILURE': raise exceptions.IngestionJobBuildFailed('Job build has failed') time.sleep(sleep) try: status = _server.get_build_info(job_name, execution_number)['result'] except requests.exceptions.ConnectionError: pass @tenacity.retry(stop=tenacity.stop_after_attempt(5), wait=tenacity.wait_fixed(10)) def build_job_and_wait_the_end(job_name, params): queue_number = build_job(job_name, params) return wait_for_build(job_name, queue_number) if __name__ == '__main__': date = '2017-10-01' build_job_and_wait_the_end( config.JENKINS_AGGREGATION_JOB, { 'context_date_range': '{}_{}'.format(date, date), 'reload': True } )