Python实现Jenkins实现自动化执行Job
Jenkins实现自动化执行Job
jenkins_url job地址
username 用户名
api_token 去jenkins设置中生成一个
job_dict中 name自己起个名字, name为jenkins中的job_name,http为该job_name对应的网址
看到执行成功后,则触发对应的含参数job
需要安装python库jenkinsapi 接口可参考该网站:http://pycontribs.github.io/jenkinsapi/
from jenkinsapi import jenkins
import requests
job_dict = {"name": ['job_name"', 'http:XXX']}class JenkinsApi:def __init__(self, job_name, data=None):self.jenkins_url = "http:XXX:8080"self.username = "XXX"self.api_token = ""self.server = jenkins.Jenkins(self.jenkins_url, self.username, self.api_token, use_crumb=True)self.build_num = 0self.job_name = job_nameself.data = dataself.build_job()def build_job(self):# 1. 获取CSRF令牌crumb_url = f"{self.jenkins_url}/crumbIssuer/api/json"auth = (self.username, self.api_token)crumb_response = requests.get(crumb_url, auth=auth)crumb_data = crumb_response.json()# 2. 准备构建请求build_url = job_dict[self.job_name][1]headers = {crumb_data['crumbRequestField']: crumb_data['crumb'],"Content-Type": "application/x-www-form-urlencoded"}self.build_num = self.server[job_dict[self.job_name][0]].get_next_build_number()response = requests.post(build_url,headers=headers,auth=auth,data=self.data # 关键修改:使用data而非params)if response.status_code == 201:print("{0}构建已成功触发".format(self.job_name))else:print(f"构建触发失败,状态码: {response.status_code}")print(f"响应内容: {response.text}")raise Exception("构建触发失败")def build_status(self):return self.server[job_dict[self.job_name][0]].get_build(self.build_num).get_status()if __name__ == "__main__":server = JenkinsApi("name")print(server.build_status())