def create_jenkins_build(self, step, job_name=None, commit=True, **kwargs):
        if step.data.get('build_no') or step.data.get('item_id'):
            return

        params_dict = self.get_job_parameters(step.job, changes_bid=step.id.hex, **kwargs)
        jenkins_params = [{'name': k, 'value': v} for k, v in params_dict.iteritems()]

        is_diff = not step.job.source.is_commit()
        job_data = self.create_jenkins_job_from_params(
            changes_bid=step.id.hex,
            params=jenkins_params,
            job_name=job_name,
            is_diff=is_diff
        )
        step.data.update(job_data)
        db.session.add(step)

        # Hook that allows other builders to add commands for the jobstep
        # which tells changes-client what to run.
        # TODO(kylec): Stop passing the params as env once the data is available
        # in changes-client by other means.
        self.create_commands(step, env=params_dict)

        if commit:
            db.session.commit()

        return job_data
Create a jenkins build for the given jobstep.
dataset/ETHPy150Open dropbox/changes/changes/backends/jenkins/builder.py/JenkinsBuilder.create_jenkins_build