Jenkins-构建后保存参数

前提:主要是以最后一次构建参数为模板,覆盖本地的config.xml 覆盖之前会备份一个config_temp.xml 防止出现意外
环境:3.7.3
引用的库: python-jenkins,requests

# 改变初始的build 用最新的重新写
import os.path
import time

import jenkins
import requests
import xml.etree.cElementTree as ET

project_path = 'C:\\Users\\WIN10\\.jenkins\\jobs\\build_wujinta'


# 修改xml 用当前的构建复制给本地xml
def xiugai_xml(local: ET.ElementTree, current: ET.ElementTree):
    if local.find('name').text != current.find('name').text:
        return
    defaultValue = local.find('defaultValue')
    value = current.find('value')
    defaultValue.text = value.text


def get_xml(path: str):
    tree = ET.parse(path)
    return tree


def load_build_number():
    with open(os.path.join(project_path, 'nextBuildNumber'), 'r', encoding='utf-8') as f:
        return f.read().replace('\n', '').strip()


def update_local_config():
    # 获取下次构建配置索引,用来寻找最后一次构建配置
    build_number = load_build_number()
    local_xml_path = os.path.join(project_path, 'config.xml')
    # 获取本地build初始config.xml配置
    local_tree = get_xml(local_xml_path)
    local_root = local_tree.getroot()

    #如果本地没有备份 则默认备份一下config.xml 以防出问题
    config_temp = os.path.join(project_path,'config_temp.xml')
    if not os.path.exists(config_temp):
        local_tree.write(config_temp,encoding='utf-8')

    # 寻找构造参数的父节点 根据key=value保存节点 用来赋值
    parameterDefinitions = local_root.find(
        './properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions')
    local_map = {}
    for param in parameterDefinitions:
        local_map[param.find('name').text] = param

    # 根据下次构建的索引-1 得到最后一次构建的xml 数据
    current_xml_path = os.path.join(project_path, 'builds', str(int(build_number) - 1), 'build.xml')
    current_xml = get_xml(current_xml_path)
    current_root = current_xml.getroot()

    # 寻找修改后构造参数的父节点 根据key=value保存节点 用来赋值
    parameters = current_root.find('./actions/hudson.model.ParametersAction/parameters')
    current_map = {}
    for param in parameters:
        current_map[param.find('name').text] = param

    # 根据配置的key 找到对应的初始配置,进行修改
    for k, v in current_map.items():
        if k not in local_map:
            print(f"本地配置找不到这个key:{k}")
            continue
        xiugai_xml(local_map.get(k), v)

    # 把修改的值写入本地初始的config.xml中, 这样下次构建就是上次配置的最新参数
    local_tree.write(local_xml_path, encoding='utf-8')

    # 链接jenkins 启动调用reload 重启jenkins 重新读取config.xml初始配置
    jenkins_server_url = 'http://127.0.0.1:8080'
    admin = "账号"
    token = "token或者密码"
    server = jenkins.Jenkins(jenkins_server_url, username=admin, password=token)
    server._request(requests.Request(
        'POST', server._build_url("manage/reload")))


if __name__ == '__main__':
    update_local_config()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值