我需要向特定用户添加一些权限(读取,构建,工作区,取消等)以执行大量工作。 我想知道有一种方法可以使用groovy脚本而不是手动执行它。
答案 0 :(得分:3)
据我所知,你不想做什么。
链接:https://wiki.jenkins-ci.org/display/JENKINS/Matrix-based+security
我建议使用'配置切片'如果有想要同时应用于多个作业的更改。
https://wiki.jenkins-ci.org/display/JENKINS/Configuration+Slicing+Plugin
但我认为权限无论如何都是配置切片的一部分。
答案 1 :(得分:2)
我尝试了上述解决方案,他们几乎工作了。我的所有尝试都导致当前的内存中权限反映了新设置,但这些权限未保存在config.xml中,因此当重新启动Jenkins时,权限将丢失。在Andrew Hura的解决方案的基础上,我提出了这个代码,它可以重新启动:
AbstractProject proj = Hudson.instance.getItem("my_job")
AuthorizationMatrixProperty authProperty = proj.getProperty(hudson.security.AuthorizationMatrixProperty)
authProperty.add("hudson.model.Item.Build:DEV")
Map<Permission, Set<String>> permissionMap = authProperty.getGrantedPermissions()
proj.removeProperty(hudson.security.AuthorizationMatrixProperty)
proj.addProperty(new AuthorizationMatrixProperty(permissionMap))
答案 2 :(得分:1)
您可以使用execute system groovy步骤来运行如下脚本:
import hudson.security.AuthorizationMatrixProperty
def jobWithPermissionsYouWant = "template-job-name"
def jobToAddPermissions = "job-to-update-name"
def jen = Jenkins.getInstance();
def templateJob = jen.getItem(jobWithPermissionsYouWant);
//get permissions from another job (use it as permissions template)
def autTemplate = templateJob.getProperty(AuthorizationMatrixProperty.class)
def permissionSetToAdd = autTemplate.getGrantedPermissions()
//get the authorization matrix property of the job you want to update
def jobToUpdate = jen.getItem(jobToAddPermissions);
def autToUpdate = jobToUpdate.getProperty(AuthorizationMatrixProperty.class)
def currPermissionSet = autToUpdate.getGrantedPermissions()
//for each permission in the template job, add permission to the job you want to update
permissionSetToAdd.each{
autToUpdate.add(it.key, "your.email@here.com")
}
println("the permissions after update: ${autToUpdate.getGrantedPermissions()}" )
(如果您弄清楚如何获取权限对象而不从其他工作中读取它,请更新)
答案 3 :(得分:1)
我们不需要创建新的权限对象,只需创建新的hudson.security.AuthorizationMatrixProperty:
Jenkins.instance.getItem("JobName")
.removeProperty(hudson.security.AuthorizationMatrixProperty)
Jenkins.instance.getItem("JobName")
.addProperty(new hudson.security.AuthorizationMatrixProperty())
Jenkins.instance.getItem("JobName")
.getProperty(hudson.security.AuthorizationMatrixProperty)
.add("hudson.model.Item.Build:DEV")
其中&#34; hudson.model.Item.Build:DEV&#34;是您可以从具有所需配置权限的xml文件中获取的权限字符串
答案 4 :(得分:1)
你应该能够把它的一部分拉出来做你想做的事,有点像这样。
AbstractProject proj = Hudson.instance.getItem("YourJob")
AuthorizationMatrixProperty authProperty = proj.getProperty(AuthorizationMatrixProperty.class)
Map<Permission,Set<String>> newPermissions = new HashMap<Permission, Set<String>>()
newPermissions.put(Item.BUILD, users)
proj.addProperty(new AuthorizationMatrixProperty(newPermissions))
proj.save()
更有趣的部分是你需要合并权限 您也可以在上面的链接中找到相关示例。
答案 5 :(得分:0)
我的解决方案是以下常规脚本:
import hudson.model.*
import jenkins.security.*
import hudson.security.*
def jobNames = []
hudson.model.Hudson.instance.getView('VIEW_NAME').items.each() {
jobNames.add(it.fullDisplayName)
}
def userIDs = ['user1_ID','user2_ID', 'user3_ID']
// For each project
for(item in Hudson.instance.items) {
for(jobName in jobNames){
if(item.name.equalsIgnoreCase(jobName))
{
println(item.name)
for(userID in userIDs){
User user = User.getOrCreateByIdOrFullName(userID)
String sID = user.getId() ;
def authorizationMatrixProperty = item.getProperty(AuthorizationMatrixProperty.class)
authorizationMatrixProperty?.add(hudson.model.Item.CANCEL, sID)
authorizationMatrixProperty?.add(Item.WORKSPACE, sID);
authorizationMatrixProperty?.add(Item.BUILD, sID);
authorizationMatrixProperty?.add(Run.DELETE, sID);
authorizationMatrixProperty?.add(Run.UPDATE, sID);
authorizationMatrixProperty?.add(Item.CONFIGURE, sID);
authorizationMatrixProperty?.add(Item.DELETE, sID);
authorizationMatrixProperty?.add(Item.READ, sID);
authorizationMatrixProperty?.add(com.cloudbees.plugins.credentials.CredentialsProvider.VIEW, sID);
item.addProperty(authorizationMatrixProperty)
item.save()
}
}
}
}
如果您具有要在视图下更改权限的作业,则此方法有效。否则,您可以只创建带有作业名称的列表。