#coding=utf-8 import requests import json import urllib #import urllib.error import time import urllib3 import re import sys jobname=sys.argv[1] # 获取构建结果 a="--select--" def getProName(): fname = pathGitLab with open(fname, 'r') as f: s = f.read() urls = re.findall(r'http://IP/[a-zA-Z0-9._/\-:]*@[A-Z0-9]*', s) # 用正则获取svn路径的url f.closed if urls == []: urls = re.findall(r'http://IP/[a-zA-Z0-9._/\-:]*', s) if urls == []: urls = re.findall(r'IP2[a-zA-Z0-9._/\-:]*.git', s) print(urls) branchs = re.findall(r'\(refs/remotes/origin/[a-zA-Z0-9._/\-:]*\)', s) print (branchs) B = branchs[0].split("/origin/") print (B) branchs0=B[-1] B1=branchs0.split(")") branch = B1[0] print (branch) branch = "/branches/"+branch url=urls[0].replace(".git",branch) print (url) else: url = urls[0] # 取第一个url else: url = urls[0] # 取第一个url #print urls print (url) L = url.split("/branches/")#以branches作为分割点,得到分支 print (L) a = L[0] branch=L[-1] print(branch) L1 = a.split('/')#以/分割得到项目名 prj = L1[-1] if prj=="source": prj=L1[-2] if prj=="BMS" or prj=="MPS": prj = L1[-3]+L1[-2] elif prj=="BMS" or prj=="MPS": pb=L1[-2].split(':') prj = pb[-1]+L1[-1] print (prj) return prj,branch def getResult(): fname = pathGitLab with open(fname, 'rb') as f: # 打开文件 first_line = f.readline() # 读第一行 #print (first_line) off = -50 # 设置偏移量 while True: f.seek(off, 2) # seek(off, 2)表示文件指针:从文件末尾(2)开始向前50个字符(-50) lines = f.readlines() # 读取文件指针范围内所有行 # print (lines) if len(lines) >= 2: # 判断是否最后至少有两行,这样保证了最后一行是完整的 last_line = lines[-1] # 取最后一行 print (last_line) break off *= 2 if 'FAILURE' in last_line.decode(): return 1 elif 'SUCCESS' in last_line.decode(): return 0 else: return 2 # 获取下一次构建的Number和当前构建的number def getNextNumber(jobname): f = open(r'/data/jenkins/jobs/%s/nextBuildNumber'% jobname, 'r') currentNumber = int(f.read()) - 1 return currentNumber # 网络模块,用于企业微信发送信息 def jenkins(result,proname,branch,jobname,jobnum): url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=5eac' # 企业微信机器人的webhook if result == 1: con = {"msgtype": "text", "text": {"content": "项目部署提醒\r\n部署项目名及分支:%s,%s\r\n部署结果:FAILURE\r\n部署失败,请查看Jenkins部署具体日志!\r\nhttp://ip3jenkins地址/job/%s/%s/console"% (proname,branch,jobname,jobnum)}, } elif result == 0: con = {"msgtype": "text", "text": {"content": "项目部署提醒\r\n部署项目名及分支:%s,%s\r\n部署结果:SUCCESS\r\n部署成功!"% (proname,branch)}, } else : con={"msgtype": "text","text": {"content":"项目部署提醒\r\n部署项目名及分支: %s,%s\r\n部署结果:UNSTABLE\r\n部署失败,请查看Jenkins部署具体日志!\r\nip3jenkins地址/job/%s/%s/console"% (proname,branch,jobname,jobnum)}, } jd = json.dumps(con).encode('utf-8') print (jd) req=urllib3.Request(url, jd) #req = urllib.request.Request(url, jd) req.add_header('Content-Type', 'application/json') response = urllib3.urlopen(req) if __name__ == '__main__': jobCurrentNumber = getNextNumber(jobname) # 获取当前构建number print (jobCurrentNumber) # 获取当前构建的目录比如D:\Jenkins\jobs\gk_check\builds\153, path = "/data/jenkins/jobs/%s/builds/" % jobname + str(jobCurrentNumber) + "/" # pathGitLab = path + "log" # 获取构建日志的路径 #pathGitLab = "E:\\Lkc\\log" pathAuthor = path + "changelog.xml" # 获取递交者信息的文件路径 tup=getProName() proname=tup[0] print (proname) branch=tup[1] print (branch) result = getResult() # 读取构建结果 print (result) jenkins(result,proname,branch,jobname,str(jobCurrentNumber)) # 最后执行函数 getResult()