Jenkins之 批量添加用户到指定视图下所有job的相关权限

1.需求:添加用户权限要耗费大量时间还没有成效,于是想着利用Jenkins API进行批量添加用户权限。

2.局限:仅适用于新添加,不适用于修改更新已有权限。

3.代码如下:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2020/11/16
# @Author  : jmmei
# @Email   : meijinmeng@126.com
# @File    : Jenkins_api.py
# @Software: PyCharm
# @Blog    : blog.csdn.net/meijinmeng


import jenkins
import xml.etree.ElementTree as ET
import re


def Join_list(username,CP= [],index=None):
    CP_list = []
    for C in CP:
        CP_list.append(index.format(C,username))
    return '\n'.join(CP_list)



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

    ##1.查看视图View下的Jobs
    def view_jobs(self,view_name=None,is_re=None):
        jobs = []
        if is_re and view_name:
            all_views = self.server.get_views()
            for view in all_views:
                pattern = r"{}*".format(view_name)
                matchObj = re.match(pattern, view['name'])
                if matchObj:
                    print("========Match View {}========".format(view['name']))
                    view_info = self.server.get_view_config(view['name'])
                    root = ET.fromstring(view_info)
                    for s in root.iter('string'):
                        jobs.append(s.text)
        elif view_name:
            view_info = self.server.get_view_config(view_name)
            root = ET.fromstring(view_info)
            for s in root.iter('string'):
                jobs.append(s.text)
        else:
            all_views = self.server.get_views()
            for view in all_views:
                if view['name'] != 'all':
                    view_info = self.server.get_view_config(view['name'])
                    root = ET.fromstring(view_info)
                    for s in root.iter('string'):
                        jobs.append(s.text)
        return jobs


    ##2.生成权限配置
    def qx_config(self,username):
        CredentialsProvider = ['View']
        Item = ['Build','Cancel','Read','Release','Workspace']
        Run = []
        SCM = []
        CP_str = "      <permission>com.cloudbees.plugins.credentials.CredentialsProvider.{}:{}</permission>"
        Item_str = "      <permission>hudson.model.Item.{}:{}</permission>"
        Run_str = "      <permission>hudson.model.Run.{}:{}</permission>"
        qx_list = []
        qx_list.append(Join_list(username,CredentialsProvider,CP_str))
        qx_list.append(Join_list(username,Item,Item_str))
        qx_list.append(Join_list(username,Run,Run_str))
        qx_list.append(Join_list(username,SCM,"      <permission>hudson.scm.SCM.{}:{}</permission>"))
        quanxian = '\n'.join(qx_list)
        return quanxian

    ##3.重新加载Job配置
    def reload_job(self,job_name,username):
        qx = self.qx_config(username)
        ##获取原来配置信息
        old_config = self.server.get_job_config(job_name)
        replace_str = '      <inheritanceStrategy class="org.jenkinsci.plugins.matrixauth.inheritance.InheritParentStrategy"/>'
        ##生成新的配置信息
        new_config = old_config.replace(replace_str,'{}\n{}'.format(replace_str,qx))   ##生成新的配置
        print(self.server.reconfig_job(job_name,new_config))
        print(new_config)


if __name__ == '__main__':
    dev_server = Jenkis_Api('http://www.baidu.com:8086/', username="baidu", password="123456")


    ##添加用户到对应Job
    #dev_server.reload_job('wjj_supply_hotfix', 'xmcheng')

    ##精确查询视图对应的Jobs
    # env_server.view_jobs('wjj_uat')
    ##模糊查询视图对应的Jobs
    jobs = dev_server.view_jobs(view_name='wjj_uat',is_re=True)
    for job in jobs:
        print(job)
        dev_server.reload_job(job, 'xmcheng')


4.效果截图:

在这里插入图片描述

5.使用

对于新手只要修改:
	1):权限
		Item = ['Build','Cancel','Read','Release','Workspace']      ##build  read等权限
	2):视图
		 jobs = dev_server.view_jobs(view_name='wjj_uat',is_re=True)   #wjj_uat 视图	
			
	3):添加权限的用户要已存在
		dev_server.reload_job(job, 'dev001')   #用户dev001
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值