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/

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())
相关推荐
IVEN_15 小时前
只会Python皮毛?深入理解这几点,轻松进阶全栈开发
python·全栈
Ray Liang16 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
AI攻城狮16 小时前
如何给 AI Agent 做"断舍离":OpenClaw Session 自动清理实践
python
千寻girling16 小时前
一份不可多得的 《 Python 》语言教程
人工智能·后端·python
AI攻城狮19 小时前
用 Playwright 实现博客一键发布到稀土掘金
python·自动化运维
曲幽20 小时前
FastAPI分布式系统实战:拆解分布式系统中常见问题及解决方案
redis·python·fastapi·web·httpx·lock·asyncio
孟健1 天前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
码路飞2 天前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
曲幽2 天前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers