Exemple #1
0
    def invoke(self, securitytoken=None, block=False,
               build_params=None, cause=None, files=None, delay=5):
        assert isinstance(block, bool)
        if build_params and (not self.has_params()):
            raise BadParams("This job does not support parameters")

        params = {}  # Via Get string

        if securitytoken:
            params['token'] = securitytoken

        # Either copy the params dict or make a new one.
        build_params = dict(build_params.items()) \
            if build_params else {}  # Via POSTed JSON

        url = self.get_build_triggerurl()
        if cause:
            build_params['cause'] = cause

        # Build require params as form fields
        # and as Json.
        data = {
            'json': self.mk_json_from_build_parameters(
                build_params,
                files)
        }
        data.update(build_params)

        response = self.jenkins.requester.post_and_confirm_status(
            url,
            data=data,
            params=params,
            files=files,
            valid=[200, 201, 303],
            allow_redirects=False
        )

        redirect_url = response.headers['location']

        #change redirect_url
        redirect = QueueItem(redirect_url, self.Jenkins)
        redirect_url = "{0}/{1}".format(self.jenkins.baseurl, redirect.get_queue_item_url_suffix())

        if not redirect_url.startswith("%s/queue/item" % self.jenkins.baseurl):
            raise ValueError("Not a Queue URL: %s" % redirect_url)

        qi = QueueItem(redirect_url, self.jenkins)
        if block:
            qi.block_until_complete(delay=delay)
        return qi