jenkins api调用

实现逻辑:

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

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

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

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

5.批量修改jenkins pipline流水线内容

需要pip install requests python-jenkins模块

代码如下:

import jenkins
import requests
from xml.etree import ElementTree

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 get_jobs_for_view(self,view):
        jobs = self.server.get_jobs(view_name=view)
        for job in jobs:
            yield job["name"]

    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_job_name, old_prefix, new_prefix):
        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)
            print(new_job_name, "创建成功")
        return new_job_name

    def job_add_view(self, view, job_name):
        data = {
            "name": job_name
        }
        response = requests.post(url=f"{self.url}/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}---视图失败")

    def update_pipline(self,url, job_name, old_string, new_string):
        try:
            res = requests.get(url=f"{url}/job/{job_name}/config.xml", auth=(self.username, self.password))
            if res.status_code == 200:
                xml_content = res.text
                xml_root = ElementTree.fromstring(xml_content)
                pipeline_element = xml_root.find('./definition/script')
                pipeline_element.text = pipeline_element.text.replace(old_string,new_string)
                data = ElementTree.tostring(xml_root, encoding='UTF-8')
                update = requests.post(url=f"{url}/job/{job_name}/config.xml", data=data, auth=(self.username, self.password))
                if update.status_code == 200:
                    print(f"{job_name}更新成功")
                else:
                    print(f"{job_name}更新失败")
            else:
                print("获取xml失败")
        except:
            print(f"{job_name}出错,可能是没有用到pipline,请检查job")
if __name__ == '__main__':
    url = "http://xxxxxx:8888/"
    token = "1134bc9b170xxxxxxxxx"
    username = 'admin'


    old_view = "xxx-测试环境-NEW"
    new_view = "test10"
    old_prefix = "xxx-testplat-test"
    new_prefix = "mytest"
    obj = Jenkins(url=url, username=username, password=token)

    #创建视图,批量复制job,批量添加到view视图中
    # obj.create_new_view(view_name=new_view)
    # for old_job in obj.get_jobs_for_view(old_view):
    #     new_job = obj.copy_job(old_job_name=old_job, old_prefix=old_prefix,new_prefix=new_prefix)
    #     obj.job_add_view(view=new_view, job_name=new_job)

    #批量修改pipline流水线内容
    old_string = "xxxxx:8888"
    new_string = "xxxxx:7777"
    for job in obj.get_jobs_for_view(new_view):
        obj.update_pipline(url=url, job_name=job, old_string=old_string, new_string=new_string)

 继上面代码,新增添加git构建参数需求

#添加git参数
    old_string = '''</jenkins.model.BuildDiscarderProperty>'''
    new_string = '''</jenkins.model.BuildDiscarderProperty>
    <hudson.model.ParametersDefinitionProperty>
      <parameterDefinitions>
        <net.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterDefinition plugin="git-parameter@0.9.17">
          <name>branch</name>
          <uuid>b93ce858-739b-4c16-8ef8-fd7fa1a877d9</uuid>
          <type>PT_BRANCH</type>
          <branch></branch>
          <tagFilter>*</tagFilter>
          <branchFilter>.*</branchFilter>
          <sortMode>NONE</sortMode>
          <defaultValue>origin/master</defaultValue>
          <selectedValue>NONE</selectedValue>
          <quickFilterEnabled>false</quickFilterEnabled>
          <listSize>5</listSize>
          <requiredParameter>false</requiredParameter>
        </net.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterDefinition>
      </parameterDefinitions>
    </hudson.model.ParametersDefinitionProperty>'''
    for job in obj.get_jobs_for_view(myobject):
        job_config_xml = obj.server.get_job_config(job)
        if "设置环境变量" in job_config_xml:
            if "<branch></branch>" not in job_config_xml:
                new_xml = job_config_xml.replace(old_string,new_string)
                obj.server.reconfig_job(job, new_xml)
                print(f"{job}添加参数完毕!!")

 

posted @ 2023-05-18 10:32  力王7314  阅读(338)  评论(0编辑  收藏  举报