1.需求:添加用户权限要耗费大量时间还没有成效,于是想着利用Jenkins API进行批量添加用户权限。
2.局限:仅适用于新添加,不适用于修改更新已有权限。
3.代码如下:
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)
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
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
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")
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.效果截图:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c53114837eb148e2da75733d3d59ac7f.png)
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