Jenkins使用groovy为作业添加权限

时间:2014-10-19 10:08:33

标签: groovy jenkins jenkins-cli

我需要向特定用户添加一些权限(读取,构建,工作区,取消等)以执行大量工作。 我想知道有一种方法可以使用groovy脚本而不是手动执行它。

6 个答案:

答案 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)

在这里查看脚本:https://github.com/MovingBlocks/GroovyJenkins/blob/master/src/main/groovy/ChangeSecurityPerJob.groovy

你应该能够把它的一部分拉出来做你想做的事,有点像这样。

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()
      }
    }
  }
}

如果您具有要在视图下更改权限的作业,则此方法有效。否则,您可以只创建带有作业名称的列表。