jenkins api调用

疯子7314 / 2023-05-18 / 原文

实现逻辑:

1.判断是否有这个view,没有就创建

2.找出old  view视图下所有的job

3.将old view视图下所有的job复制一份并且修改成自己想要的名字

4.将修改好的job加入到新创建的view视图当中

需要pip install requests python-jenkins模块

代码如下:

import jenkins
import requests


class Jenkins(object):
    def __init__(self, url, username, password):
        self.url = url
        self.username = username
        self.password = password
        self.server = jenkins.Jenkins(url=url, username=username, password=token)

    def create_new_view(self, view_name):
        res = self.server.view_exists(view_name)
        if res:
            print(f"{view_name}视图已存在,无法创建")
        else:
            self.server.create_view(view_name, jenkins.EMPTY_VIEW_CONFIG_XML)


    def copy_job(self,old_view,old_prefix,new_prefix):
        job_list = []
        jobs = self.server.get_jobs(view_name=old_view)
        for i in jobs:
            old_job_name = i["name"]
            new_job_name = old_job_name.replace(old_prefix, new_prefix)
            is_exists = self.server.job_exists(new_job_name)
            if is_exists:
                print(f"{new_job_name}--job已存在,无法创建")
            else:
                self.server.copy_job(old_job_name, new_job_name)
                job_list.append(new_job_name)
                print(new_job_name, "创建成功")
        return job_list

    def job_add_view(self, view, job_name):
        data = {
            "name": job_name
        }
        response = requests.post(url=f"http://1.xxxx.xxxx.xxxx:8888/view/{view}/addJobToView", data=data, auth=(self.username,self.password))
        if response.status_code == 200:
            print(f"{job_name}---添加到---{view}---视图成功")
        else:
            print(f"{job_name}---添加到---{view}---视图失败")


if __name__ == '__main__':
    url = "http://10.xxx.xxx.xxx:8888/"
    token = "1134bc9b1702dfd7a2xxxxxxxxxx"
    username = 'admin'


    old_view = "TESTPLAT-测试环境-NEW"
    new_view = "test10"
    old_prefix = "jinshan-testplat-test"
    new_prefix = "mytest"
    obj = Jenkins(url=url, username=username, password=token)
    obj.create_new_view(view_name=new_view)
    jobs = obj.copy_job(old_view, old_prefix, new_prefix)
    for job in jobs:
        obj.job_add_view(view=new_view, job_name=job)