0
点赞
收藏
分享

微信扫一扫

运维必备:用Python批量给用户授权Jenkins Job

捌柒陆壹 2022-02-09 阅读 102

简介

Jenkins角色管理是基于Role Strategy插件来添加新的基于角色的机制来管理用户的权限。

本篇文章是利用role api批量对Jenkins job授权,来写一个脚本。

Role 插件安装就不细写了。

Role配置

Manage Roles

在Manage Roles界面上有三个模块:Global roles、Item roles与Node roles。

Global roles

创建全局角色,例如管理员,作业创建者,匿名角色等,从而可以在全局基础上设置总体,代理,作业,运行,查看和SCM权限。

运维必备:用Python批量给用户授权Jenkins Job_python


Item roles

创建项目角色,仅允许基于项目设置Job和Run权限。

在这里我们有两个环境test-*与pre-*,我们分别用不同的环境的项目权限。



比如test-nginx2,pre-nginx2

运维必备:用Python批量给用户授权Jenkins Job_不区分大小写_02

在添加Item roles的时候有如下规则:


  • 如果将字段设置为test-.*,则该角色将匹配名称以开头的所有作业test-。
  • 模式区分大小写。要执行不区分大小写的匹配,请使用(?i)表示法:(?i)test-.*这样不区分大小写的。
  • 可以使用以下表达式匹配文件夹 ^foo/bar.*

在这里我们添加好管理以test开头的项目与以pre-开头的项目。


Assign Roles

设置好项目角色,将这些角色分配给用户和用户组。


  • Global roles:全局角色,设置管理员权限
  • Item roles:项目角色,设置项目权限
  • Node roles:节点角色,主从节点设置权限

这块我们用Python脚本控制

Python脚本编写


vim /data/script/role.py
#coding:utf8


import requests
import sys


class auth(object):


def __init__(self):
self.Jenkins = {"url":"http://192.168.253.204:8080/role-strategy/strategy/assignRole",
"passwd":"123456"}
#授权
def Grant(self,JK_USER,roleType,roleName):
if roleType == "global" :
data = {'type': 'globalRoles','roleName': roleName,'sid': JK_USER}
elif roleType == "project" :
data = {'type': 'projectRoles','roleName': roleName,'sid': JK_USER}


response = requests.post(self.Jenkins["url"],
data=data,
auth=('root', self.Jenkins["passwd"]))
print(response.status_code,response.text)


return int(response.status_code)


if __name__ == '__main__':
if sys.argv[1] == "help":
print("1. python3 role.py JK_USER global JK_PROJECTNAME")
print("2. python3 role.py JK_USER project JK_PROJECTNAME")
else:
server = auth()
JK_USER = sys.argv[1]
roleType = sys.argv[2]
roleName = sys.argv[3:]


#do grant
for ProjectRoleName in roleName:
result = server.Grant(JK_USER,roleType,ProjectRoleName)
if result <=400 :
print("--->{0}-->{1}-->{2} --->Success!".format(JK_USER,roleType,ProjectRoleName))
else:
raise Exception("--->{0}-->{1}-->{2} --->Error!".format(JK_USER,roleType,ProjectRoleName))


Jenkins Pipeline




node {
stage('授权global角色') {
sh 'python3 /data/script/role.py ${JK_USER} global ${JK_PROJECTNAME}'
}
stage('授权item角色') {
sh 'python3 /data/script/role.py ${JK_USER} project ${JK_PROJECTNAME}'
}
}

运维必备:用Python批量给用户授权Jenkins Job_不区分大小写_03

新建一个Jenkins Jobs 脚本拷贝进去即可。

更多文章请扫一扫

运维必备:用Python批量给用户授权Jenkins Job_nginx_04


举报

相关推荐

0 条评论