使用Python获取Jenkins变更和编译错误信息

        为方便打包,使用Python做了jenkins打包工具,便于提醒打包结果和版本变更信息。

class Jenkins(object):
    def __init__(self,jenkins_server_url,user_id,password,job_name):
        self.server=jenkins.Jenkins(jenkins_server_url, username=user_id, password=password)
        self.job_name=job_name


    @property
    def  get_job_number(self):
        """
        功能:返回正在运行的job的number
        :param job_name: 正在构建的jenkins名称
        :return: 存在正在执行的job返回int类型的number,不存在的时候返回none
        """
        run_buid =self.server.get_running_builds()
        if run_buid:
            for job in run_buid:
                if urllib.parse.unquote(job.get('name')) == self.job_name:
                    number = job.get('number')
                    return number
            return None
        else:
            return None

    
         def get_output(self,number):
  """
        功能:获取编译报错信息
        number:在正在执行的job返回int类型的number
        """
        ouput=self.server.get_build_console_output(name=self.job_name,number=number).replace('\n','!')
        pattern_recommed_res = re.search(r'Execution failed(.*?)BUILD FAILED in', ouput, re.M | re.I)
        if pattern_recommed_res:
            if pattern_recommed_res.group():
                return pattern_recommed_res.group().replace("BUILD FAILED in","").replace('!','\n')
        else:
            return None

        def get_jobs_status(self):
        """
        功能:返回当前job状态
        :param job_name:job名称
        :return:
        """
        try:
            self.server.assert_job_exists(self.job_name)
        except Exception as e:
            print(e)
            job_statue = '1'
        # 判断job是否处于排队状态
        inQueue = self.server.get_job_info(self.job_name)['inQueue']
        if str(inQueue) == 'True':
            job_statue = 'pending'
            running_number = self.server.get_job_info(self.job_name)['nextBuildNumber']
        else:
            # 先假设job处于running状态,则running_number = nextBuildNumber -1 ,执行中的job的nextBuildNumber已经更新
            running_number = self.server.get_job_info(self.job_name)['nextBuildNumber'] - 1
            try:
                running_status = self.server.get_build_info(self.job_name, running_number)['building']
                if str(running_status) == 'True':
                    job_statue = 'running'
                else:
                    # 若running_status不是True说明job执行完成
                    job_statue = self.server.get_build_info(self.job_name, running_number)['result']
            except Exception as e:
                # 上面假设job处于running状态的假设不成立,则job的最新number应该是['lastCompletedBuild']['number']
                lastCompletedBuild_number = self.server.get_job_info(self.job_name)['lastCompletedBuild']['number']
                job_statue = self.server.get_build_info(self.job_name, lastCompletedBuild_number)['result']

        return job_statue

        def get_jenkins_change(self,number,toenv,env):
        global url
        try:
            response =self.server.jenkins_open(requests.Request(
                'GET',headers={"Connection": "close"}, url="http://XXXXX//job/{0}/{1}/changes".format(self.job_name,number))
            )
            if response:
                soup = BeautifulSoup(response, 'lxml')
                # a_lists=soup.body.find_all('a')
                name_lists = soup.select("b a")
                chang_lists = soup.select("pre")
                name_result_lists = []
                change_result_lists = []
                for a_list in name_lists:
                    name_result_lists.append(a_list.string)
                for change_list in chang_lists:
                    change_result_lists.append(change_list.text)
                change_dict = dict(zip(change_result_lists, name_result_lists))
           
                return change_dict
            else:
                raise Exception('job[%s] number[%d] does not exist'
                                       % (self.job_name, number))
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取Jenkins pipeline的构建信息,可以使用python-jenkins插件提供的方法。具体步骤如下: 1. 首先,导入python-jenkins模块: ```python import jenkins ``` 2. 创建一个Jenkins对象,并连接到Jenkins服务器: ```python server = jenkins.Jenkins(jenkins_server, username=user_id, password=api_token) ``` 其中,jenkins_server是Jenkins服务器的URL,user_id和api_token是用于身份验证的用户名和API令牌。 3. 使用Jenkins对象的get_job_info方法获取指定pipeline的构建信息: ```python job_info = server.get_job_info('pipeline_name') ``` 其中,pipeline_name是要获取构建信息的pipeline的名称。 4. 通过job_info可以获取到构建信息的各种属性,例如构建号、状态、开始时间、结束时间等。可以根据需要提取所需的信息。 以下是一个完整的示例代码: ```python import jenkins # 连接到Jenkins服务器 server = jenkins.Jenkins(jenkins_server, username=user_id, password=api_token) # 获取指定pipeline的构建信息 job_info = server.get_job_info('pipeline_name') # 提取构建信息的属性 build_number = job_info['lastBuild']['number'] build_status = job_info['lastBuild']['result'] build_start_time = job_info['lastBuild']['timestamp'] build_end_time = job_info['lastBuild']['timestamp'] # 打印构建信息 print("Build Number:", build_number) print("Build Status:", build_status) print("Build Start Time:", build_start_time) print("Build End Time:", build_end_time) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值