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/
python
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 = 0
self.job_name = job_name
self.data = data
self.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())