py调jenkins接口发布并通知-基础实现篇
py调jenkins接口发布并通知
这个需求是我给自己安排的,因为每到工作日,基本晚上10点后都要进行生产环境的发布(10点后会自动关停系统,直到第二天7点),总共3个任务。天天要我发,老实说,不胜其烦,所以周末空闲写了个雏形,今天小改下,就能跑了~~~
只能说,这个python脚本比较拙劣,刚好满足基本需求,后续需要完善的地方比较多,例如3个任务写到同一个脚本
脚本思路:
![](https://img2022.cnblogs.com/blog/520218/202209/520218-20220919221128291-380513190.png)
(1)环境准备:python3.6,需要安装jenkins相关模块
pip3 install python-jenkins jenkinsapi
(2)三大组成:获取jenkins操作对象,构建任务并获取结果状态,发钉钉通知
特别要说下:
构建参数化任务,构建任务需要添加构建参数
server.build_job(jobname, parameters=param_dict)
不然报错:requests.exceptions.HTTPError: 400 Client Error: Bad Request for url
即使保持默认的构建参数,不需要修改,直接写成
server.build_job(jobname)
都会报错 400 Client Error: Bad Request for url
#!/usr/bin/python3.6 #coding=UTF-8 ''' 输入:jenkins服务器的地址,用户名和密码 输出:已构建任务的状态 ''' import datetime, time import jenkinsapi import jenkins import json import sys import requests from jenkinsapi.jenkins import * from jenkinsapi.job import * from jenkinsapi.build import Build ''' 1、获取jenkins操作对象 ''' def jenkins_get_server(): print("start to get") url = "jenkins地址" username='jenkins登录名' password='jenkins登录密码' #实例化jenkins对象,连接远程的 jenkins master server server = jenkins.Jenkins(url, username, password) return server ''' 2、构建任务,获取任务构建状态 ''' def jenkins_get_jobbuildstat(): server = jenkins_get_server() name = '要发布的任务名' param_dict = {'BRANCH': '要发布的分支名'} server.build_job(name, parameters=param_dict) # 构建任务: 试过不传参,竟然没调起来跑--》原因未知,所以上面写的param_dict是我被迫写的(其实就是默认配置在jenkins发布的分支) # server.build_job('要发布的任务名') # 等4分多钟后,获取任务构建状态--》人为观察总结 time.sleep(250) lastbuildNumber=server.get_job_info(name)['lastBuild']['number'] print(lastbuildNumber) #最近一次的构建编号 job_status = server.get_build_info(name,lastbuildNumber)['result'] print(job_status) #最近一次的构建状态 # 返回构建任务的状态 if job_status == 'SUCCESS': msg = 'xxx:构建成功' print("最近一次,xxx,构建成功") else: msg = 'xxx:构建失败, 请检查!' print("最近一次,xxx,构建失败!") # 发钉钉通知 send_msg(msg) ''' 3、钉钉通知 ''' def send_msg(text): headers = {'Content-Type': 'application/json;charset=utf-8'} api_url = "钉钉机器人url" json_text= { "msgtype": "text", "text": { "content": text }, "at": { "atMobiles": [ "加一的手机号码" ], "isAtAll": False } } result = requests.post(api_url,json.dumps(json_text),headers=headers).content print(result) jenkins_get_jobbuildstat()
运行结果:
最后贴一个获取jenkins任务参数的函数,我觉得蛮有用的,传参构建任务可能会用到,毕竟人为去数可能会漏
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def Url_Get_Job_List(url='jenkins地址', username='jenkins登录用户', password='jenkins登录密码'): server = jenkins.Jenkins(url, username, password) name = "构建任务名" build_arg = server.get_job_info(name)['property'] for parameter_definitions in build_arg: if len(parameter_definitions) > 1: for parameter in parameter_definitions["parameterDefinitions"]: print('----------------------------------') print('name: %s' % parameter["name"]) print('class: %s' % parameter["_class"]) print('type: %s' % parameter["type"]) print('description: %s' % parameter["description"]) print('jenkins_arg: %s' % parameter["defaultParameterValue"]["name"]) print('default_value: %s' % parameter["defaultParameterValue"]["value"]) if parameter["_class"] == 'hudson.model.ChoiceParameterDefinition': print('can_choices: %s' % parameter["choices"]) print('----------------------------------') Url_Get_Job_List()