jenkins 是一款很好的CI(持續集成)工具,可是在常規化部署時若是碰到不少job須要構建和改變代碼分支進行部署時仍是挺麻煩的,因此考慮實現自動化。web
*# -- coding: utf-8 -*-api
import jenkins
import reapp
def GetYaml():
yamlPath = os.path.join(os.getcwd(),"JenkinsBranch.yaml")
f = open(yamlPath,'r',encoding='utf-8')
yamldata = yaml.load(f.read())
return yamldataide
def linkJenkins():
jenkins_server_url = 'http://jenkins.test***.cn/jenkins/'
server = jenkins.Jenkins(jenkins_server_url,username=userName,password=password)
return server工具
def CheckBranch(server):
jobsLen = len(server.get_jobs())
list1 = []
list2 = []ui
for i in range(jobsLen): # print(server.get_jobs()[i]['name']) matchObj = re.findall(re.compile(r'<name>\*/(.*?)</name>'),server.get_job_config(server.get_jobs()[i]['name'])) if matchObj is None: print("ServerName:" + server.get_jobs()[i]['name'] + " 分支名稱:" + "None") continue elif matchObj[0] != 'master': list1.append(server.get_jobs()[i]['name']+' '+matchObj[0]) else: list2.append(server.get_jobs()[i]['name'] + ' ' + matchObj[0]) for i in range(len(list1)): print("序號:%s 服務名:%s 分支名:%s" % (i + 1, list1[i].split()[0],list1[i].split()[1])) print('\n') for i in range(len(list2)): print("序號:%s 服務名:%s 分支名:%s" % (i + 1, list2[i].split()[0],list2[i].split()[1]))
def SetBranch():
yamlData = GetYaml()
jenkins_server_url = yamlData['Jenkins']['url']
userName = yamlData['Jenkins']['username']
password = yamlData['Jenkins']['password']url
driver = webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(10) driver.get(jenkins_server_url) driver.find_element_by_id("j_username").send_keys(userName) driver.find_element_by_name("j_password").send_keys(password) driver.find_element_by_id("yui-gen1-button").click() server = linkJenkins() jobsLen = len(server.get_jobs()) mustBuildJob = GetYaml()['Server'] for i in range(jobsLen): jobName = server.get_jobs()[i]['name'] for key in mustBuildJob: if jobName == key: driver.get(jenkins_server_url + "job/" + key + "/configure") branchKey = driver.find_element_by_xpath('//*[@id="main-panel"]/div/div/div/form/***/input') ** # print(branchKey.get_attribute('value'))** branchKey.clear() branchKey.send_keys("*/" + str(mustBuildJob[key])) time.sleep(2) driver.find_element_by_name('Submit').click() time.sleep(2) server.build_job(jobName)
def SetMaster():
yamlData = GetYaml()
jenkins_server_url = yamlData['Jenkins']['url']
userName = yamlData['Jenkins']['username']
password = yamlData['Jenkins']['password']code
driver = webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(10) driver.get(jenkins_server_url) driver.find_element_by_id("j_username").send_keys(userName) driver.find_element_by_name("j_password").send_keys(password) driver.find_element_by_id("yui-gen1-button").click() server = linkJenkins() jobsLen = len(server.get_jobs()) for i in range(jobsLen): driver.get(jenkins_server_url + "job/" + server.get_jobs()[i]['name'] + "/configure") branchKey = driver.find_element_by_xpath('//*[@id="main-panel"]/div/div/div/form/table/tbody***/input') branch = branchKey.get_attribute('value').split('/')[1] if branch != 'master': branchKey.clear() branchKey.send_keys("*/master") time.sleep(1) driver.find_element_by_name('Submit').click() server.build_job(server.get_jobs()[i]['name'])
JenkinsBranch.yaml orm
Jenkins: url: http://jenkins.test.***.cn/jenkins/ username: 123.gean password: 123654
Server:
api-invoice: master
api-sms: master server
if name == "main":
link = linkJenkins() CheckBranch(link) SetBranch() SetMaster()