Example #1
0
def build(jenkins, job, monkeypatch):
    def fake_get_data(cls, url, params=None, tree=None):  # pylint: disable=unused-argument
        return BUILD_DATA_FAIL

    monkeypatch.setattr(JenkinsBase, 'get_data', fake_get_data)

    return Build('http://localhost:800/view/Buildampel/job/Fahrzeug-Server/3119/', 3119, job)    
Example #2
0
 def get_build(self, buildnumber):
     assert isinstance(buildnumber, int)
     try:
         url = self.get_build_dict()[buildnumber]
         return Build(url, buildnumber, job=self)
     except KeyError:
         raise NotFound('Build #%s not found' % buildnumber)
Example #3
0
 def test_build_depth(self, get_data_mock):
     Build('http://halob:8080/job/foo/98', 98, self.j, depth=0)
     get_data_mock.assert_called_with(
         'http://halob:8080/job/foo/98/api/'
         'python',
         tree=None,
         params={'depth': 0})
Example #4
0
def build(job, monkeypatch):
    def fake_poll(cls, tree=None):  # pylint: disable=unused-argument
        return configs.BUILD_DATA

    monkeypatch.setattr(Build, '_poll', fake_poll)

    return Build('http://', 97, job)
Example #5
0
 def get_build_metadata(self, buildnumber):
     """
     Get the build metadata for a given build number. For large builds with
     tons of tests, this method is faster than get_build by returning less
     data.
     """
     assert type(buildnumber) == int
     url = self.get_build_dict()[buildnumber]
     return Build(url, buildnumber, job=self, depth=0)
Example #6
0
 def get_build_metadata(self, buildnumber):
     """
     Get the build metadata for a given build number. For large builds with
     tons of tests, this method is faster than get_build by returning less
     data.
     """
     assert isinstance(buildnumber, int)
     try:
         url = self.get_build_dict()[buildnumber]
         return Build(url, buildnumber, job=self, depth=0)
     except KeyError:
         raise NotFound('Build #%s not found' % buildnumber)
Example #7
0
def get_build_result(name, url, number):
    server = get_server_instance()
    job = server.get_job(name)
    try:
        obj = Build(url, number, job)
        console = obj.get_console()
        if obj.is_running():
            return console, False, '构建中'
        elif obj.is_good():
            return console, True, '构建成功'
        else:
            return console, False, '构建失败'
    except:
        return '准备构建中,耐心等待', False, '准备构建中,耐心等待'
Example #8
0
def get_build_info(last_number=0):
    server = _get_server_instance()
    job = server.get_job('build')
    last_one_build = job.__dict__['_data']['builds'][last_number]
    url = last_one_build['url']
    number = last_one_build['number']
    obj = Build(url, number, job)
    para = obj.get_params()
    print(para)
    repo_name = para['REPO_NAME']
    pjt_name = para['PROJECT_NAME']
    status = obj.get_status()
    timestamp = obj.get_timestamp().strftime("%Y-%m-%d %H:%M:%S")
    return (timestamp, repo_name, pjt_name, number, status)
Example #9
0
def run_jenkins_job(phrase):
    job_name = JOBS_MAPPING.get(phrase, None)
    if job_name is None:
        return "任务不存在"

    try:
        server = Jenkins(JENKINS_URL,
                         username=JENKINS_USER,
                         password=JENKINS_PASS)
    except HTTPError as ex:
        return "jenkins连接出错: %s" % ex
    job = server[job_name]
    job_buildid = server.get_job(job_name).get_next_build_number()
    run_job = job.invoke()
    time.sleep(10)

    #  查看任务状态
    url = f'''{job.baseurl}/{job_buildid}/'''
    obj = Build(url, job_buildid, job)
    obj.block()
    # obj 只是获取当时的任务状态,所以需要等待任务执行完,再获取一次状态
    obj = Build(url, job_buildid, job)
    result = f'''{phrase}完成, 任务名称: {obj.name}, 执行结果:{obj.get_status()}, 耗时: {obj.get_duration().total_seconds()}秒'''
    return result
Example #10
0
 def get_job_buildhistory(self, jobname):
     server = self.get_server_instance()
     job = server[jobname]
     data = job.__dict__['_data']['builds']
     job_build_list = []
     for i in data:
         job_build_dic = {}
         lll = Build(i['url'], i['number'], job)
         lll_dic = lll.get_data(i['url'] + 'api/python/')
         timest = lll_dic['timestamp'] / 1000
         job_build_dic['buildtime'] = time.strftime("%Y-%m-%d",
                                                    time.localtime(timest))
         job_build_dic['status'] = lll_dic['result']
         job_build_dic['buildnum'] = lll_dic['number']
         job_build_list.append(job_build_dic)
     return job_build_list
Example #11
0
def create_build_json(job, buildnumber, monkeypatch):
    def fake_get_data(cls, url, params=None, tree=None):  # pylint: disable=unused-argument
        return {
            "_class": "org.jenkinsci.plugins.workflow.job.WorkflowRun",
            "actions": [],
            "artifacts": [],
            "building": False,
            "description": None,
            "displayName": "#3119",
            "duration": 1208714,
            "estimatedDuration": 749457,
            "executor": None,
            "fullDisplayName": "Fahrzeug-Server #3119",
            "id": "3119",
            "keepLog": False,
            "number": buildnumber,
            "queueId": 52737,
            "result": "UNSTABLE",
            "timestamp": 1583495750710,  # 03/06/2020 @ 11:55am (UTC)
            "url":
            "http://localhost:800/view/Buildampel/job/Fahrzeug-Server/3119/",
            "changeSets": [],
            "culprits": [],
            "nextBuild": {
                "number":
                3120,
                "url":
                "http://localhost:800/view/Buildampel/job/Fahrzeug-Server/3120/"
            },
            "previousBuild": {
                "number":
                3112,
                "url":
                "http://localhost:800/view/Buildampel/job/Fahrzeug-Server/3112/"
            }
        }

    monkeypatch.setattr(JenkinsBase, 'get_data', fake_get_data)
    #build.get_data    = mock.MagicMock(return_value=fake_get_data)

    return Build(
        'http://localhost:800/view/Buildampel/job/Fahrzeug-Server/3119/',
        buildnumber, job)
    def setUp(self, _poll):
        _poll.return_value = self.DATA
        self.j = mock.MagicMock()  # Job
        self.j.name = 'FooJob'

        self.b = Build('http://', 97, self.j)
Example #13
0
def build_with_diff_baseurl(job_with_diff_baseurl, monkeypatch):
    def fake_poll(cls, tree=None):  # pylint: disable=unused-argument
        return configs.BUILD_DATA

    monkeypatch.setattr(Build, '_poll', fake_poll)
    return Build('http://localhost', 97, job_with_diff_baseurl)
Example #14
0
 def get_build(self, buildnumber):
     assert type(buildnumber) == int
     url = self.get_build_dict()[buildnumber]
     return Build(url, buildnumber, job=self)
Example #15
0
 def test_build_depth(self, get_data_mock):
     build = Build('http://halob:8080/job/foo/98', 98, self.j, depth=0)
     get_data_mock.assert_called_with(
         'http://halob:8080/job/foo/98/api/python?depth=0')
Example #16
0
 def get_build(self, buildnumber):
     assert isinstance(buildnumber, int)
     url = self.get_build_dict()[buildnumber]
     return Build(url, buildnumber, job=self)
Example #17
0
def watch_jenkins_job(args, settings, **kwargs):
    from jenkinsapi.jenkins import Jenkins
    from jenkinsapi.jenkins import JenkinsBase
    from jenkinsapi.build import Build
    from jenkinsapi.utils.requester import Requester
    try:
        from urllib.parser import urlparse
    except ImportError:
        from urlparse import urlparse

    parser = argparse.ArgumentParser()
    parser.add_argument('url', type=str, nargs=1, help='Jenkins URL to watch')
    parser.add_argument(
        '--sleep-interval',
        dest='sleep_interval',
        default=30,
        type=int,
        help='Amount of time to sleep',
    )
    parser.add_argument('--retries',
                        dest='retries',
                        default=25,
                        type=int,
                        help='Number of times to re-poll Jenkins')
    options = parser.parse_args(args)

    class NoVerifyRequester(Requester):
        def get_request_dict(self, *args, **kwargs):
            request_dict = super(NoVerifyRequester,
                                 self).get_request_dict(*args, **kwargs)
            request_dict['verify'] = False
            return request_dict

    def get_job_name_and_build_number(url):
        job_build_matcher = re.compile(
            ".*/job/(?P<job>[^/]+)/(?P<build_number>[^/]+)/.*")
        job, build_no = job_build_matcher.search(url).groups()
        return job, int(build_no)

    def get_formal_build_url(jenkins_url, job_name, build_no):
        return os.path.join(jenkins_url, 'job', job_name, str(build_no))

    def get_jenkins_base_url(url):
        parsed = urlparse(url)
        return parsed.scheme + '://' + parsed.netloc

    job_name, build_no = get_job_name_and_build_number(options.url[0])
    jenkins_url = get_jenkins_base_url(options.url[0])
    formal_build_url = get_formal_build_url(jenkins_url, job_name, build_no)

    try:
        jenkins = Jenkins(jenkins_url, requester=NoVerifyRequester())
        job = jenkins[job_name]
        job.RETRY_ATTEMPTS = options.retries
        build = Build(formal_build_url, build_no, job)

        while True:
            if not build.is_running():
                if build.is_good():
                    send_flash_message(
                        settings.device_url, {
                            'message':
                            'Jenkins job %s:%s succeeded' % (
                                job_name,
                                build_no,
                            ),
                            'blink': [(0, 255, 0), (0, 0, 0)],
                            'timeout':
                            20,
                        })
                    logger.warn(
                        'Job %s succeeded',
                        formal_build_url,
                    )
                else:
                    send_flash_message(
                        settings.device_url, {
                            'message':
                            'Jenkins job %s:%s failed (%s)' %
                            (job_name, build_no, build.get_status()),
                            'blink': [(255, 0, 0), (0, 0, 0)],
                            'timeout':
                            20,
                        })
                    logger.warn(
                        'Job %s failed',
                        formal_build_url,
                    )
                sys.exit(0)
            time.sleep(options.sleep_interval)
    except Exception as e:
        logger.exception(e)
Example #18
0
 def __init__(self, jobname, buildnum, **kwargs):
     super().__init__(**kwargs)
     for i in self.server[jobname].__dict__['_data']['builds']:
         if i['number'] == buildnum:
             self.obj = Build(i['url'], i['number'], self.server[jobname])
             break
Example #19
0
 def get_last_build(self):
     """
     Get the last build
     """
     buildinfo = self._data["lastBuild"]
     return Build(buildinfo["url"], buildinfo["number"], job=self)