jenkinsapi启动job、判断job执行状态、获取jenkins执行结果

#!/usr/bin/python
#coding=UTF-8

‘’’
Created on 2018-07-24
@author: wanghuan
@module: jenkinsApi.jenkinsApi

入参:
应用名 jenkins地址 cmdb接口地址 git提交哈希值
appname jenkins_Url cmdb_url commit_id

功能:
执行jenkins相关操作:
根据提供的应用名和commit_id执行jenkinsjob任务,并返回job最终执行状态

‘’’
import requests
import os,sys
import pyaml
import jenkins
import time
reload(sys)
sys.setdefaultencoding(‘utf-8’)

class jenkinsApi():
#初始化jenkins相关信息
def init(self,jenkins_Url,cmdb_url):
#cmdb接口地址和jenkins地址
self._jenkins_Url = jenkins_Url
self._cmdb_url = cmdb_url

  def getCmdbInfo(self,appname):
     r = requests.get(self._cmdb_url+appname).json()
     if r['data']:    
        data=r['data']
        #fin=pyaml.dump(data) 
        #print  fin
        jenkins_job=data.get('jenkinsjob')
        if jenkins_job:
           jenkinsjob=data['jenkinsjob']
           print 'jenkinsjob=',jenkinsjob
           return jenkinsjob

        else:
          print '应用名和jenkins job名字一致,直接使用应用名'
          jenkinsjob=appname
          print 'jenkinsjob=',jenkinsjob
          print "appname=",appname
          return jenkinsjob
     else:
        print "cmdb接口有问题,请确认"
  '''
  def store_package(self,app_name,branch_name):
      path ='/opt/build_package/'+app_name+'/'+branch_name
      print path
      isExists=os.path.exists(path)
      if isExists:
         print '此版本号已经构建'
         return False
      else:
         os.makedirs(path)
         print path+' 创建成功'
         return True
  '''          
  def getJenkinsInfo(self,appname,commit_id,username,job_name,password,param_dict,branch_name):
       server = jenkins.Jenkins(self._jenkins_Url,username,password)
       time.sleep(5)
       print 'jenkins调用参数=',job_name,param_dict
       #print server.get_job_info(job_name)
       try:
           next_bn = server.get_job_info(job_name)['nextBuildNumber']
       except:
           print "可能是应用名和jenkinsjob名不一致,你可以尝试修改一下应用拓展信息"
           print "next_bn获取异常,重试"
           time.sleep(5)
           next_bn = server.get_job_info(job_name)['nextBuildNumber']
       else:
           print '本次执行的jenkins job编号为:',next_bn
       try:
           server.build_job(job_name,param_dict)
       except:
           print "可能是应用名和jenkinsjob名不一致,你可以尝试修改一下应用拓展信息"
           print "启动jenkinsjob异常,重试"
           time.sleep(5)
           server.build_job(job_name,param_dict)
       else:
           print 'jenkins job地址获取成功'
           
       # 启动一个job的时候经常会有延迟的,这是个经验值,暂定10秒,可根据实际情况进行更改。
       time.sleep(10)
       sleeptime=0
       while sleeptime < 50:
         #print "sleep 循环中"
         try:
           server.get_build_info(job_name,next_bn)['building']
         except:
              time.sleep(5)
              print "jenkins job还没有启动起来,继续等待5秒..."
              sleeptime = sleeptime+5
         else:
              print "jenkins job启动成功"
              sleeptime=50
       print "sleeptime",sleeptime
       print "退出sleep循环"
       while True:
            if server.get_build_info(job_name,next_bn)['building'] == False:
                 
                 jobstatus=server.get_build_info(job_name,next_bn)['result']
                 print jobstatus
                 print '应用名=',appname
                 print 'job编号名字=',next_bn
                 print 'commitid=',commit_id
       
                 if jobstatus == "FAILURE":
                     #print "jenkins构建结果:",jobstatus
                     return False
                 else:
                     #print "jenkins构建结果:",jobstatus
                    
                     #if self.store_package(appname,branch_name):
                         return  True
                     #else:
                     #    return False

if name == “main”:
jenkinsMain()

def jenkeinsMain():
releaseSheetNum=os.getenv(‘ITSM_TICKET’)
#print ‘\033[1;31;42mreleaseSheetNum=\033[0m’,releaseSheetNum
app_name=sys.argv[1]
version=sys.argv[2]
branch_name=‘release-’+version
commit_id=sys.argv[3]
jenkinsurl = ‘xxxx’
cmdburl=‘xxxxx’
username = ‘xxxxx’
password = ‘xxxxx.’
param_dict={“commit_ID”:commit_id}
jA=jenkinsApi(jenkinsurl,cmdburl)
job_name=jA.getCmdbInfo(app_name)
jobstauts=jA.getJenkinsInfo(app_name,commit_id,username,job_name,password,param_dict,branch_name)
return jobstauts

你可能感兴趣的:(jenkins)