2016-08-03 22 views
0

Ich versuche, Jenkins Benutzer Löschung zu automatisieren. Groovy Skript, das ich versuchte, ist wie folgt.Entfernen Sie Benutzer von Jenkins über groovy Skript, wenn rollenbasierte Strategie verwendet wird

import hudson.model.User User u = User.get('rh54') u.delete()

Erwähnt groovy Skript nicht gelöscht, wenn der Benutzer LDAP integriert ist. Auch der Sicherheitsbereich, der verwendet wird, ist eine rollenbasierte Strategie.

Bitte vorschlagen

+0

Ich testete das gleiche Skript für die rollenbasierte Strategie und löschte den Benutzer erfolgreich. Könntest du uns bitte wissen lassen, wie du das groovige Skript ausführst? Bitte posten Sie den Inhalt Ihres Skripts hier. –

+0

Unten ist das Skript, das ich benutze, um den Benutzer aus 'Jenkins.import hudson.model.User Benutzer u = User.get (id) u.delete()' –

+0

zu löschen Ich auch das Skript von Script Console ausführen . Der ID wurde der Wert in dem Skript zugewiesen, mit dem der Benutzer erstellt wird. Auch der Benutzer wird nicht in der internen Jenkins-Datenbank verwaltet. Der Benutzer wird gegenüber dem LDAP authentifiziert. –

Antwort

0

Die unten groovy Skript eine neue Instanz von RoleBasedAuthorizationStrategy ohne die jeweiligen Benutzer aus allen Rollen erstellen soll.

Bitte beachten Sie, dass ich es nicht gründlich getestet habe und sicherstellen, dass Sie vor dem Testen dieses Skripts eine Sicherungskopie Ihrer Jenkins-Instanz erstellen.

import hudson.model.* 
import com.michelin.cio.hudson.plugins.rolestrategy.* 

String removeRolesFromUser="test" 

def roleBasedAuthorizationStrategy = Jenkins.getInstance().getAuthorizationStrategy() 

if(roleBasedAuthorizationStrategy instanceof RoleBasedAuthorizationStrategy){ 
    boolean changed=false 
    Map<String, RoleMap> roleMaps = roleBasedAuthorizationStrategy.getRoleMaps() 
    RoleBasedAuthorizationStrategy updatedRoleBasedAuthorizationStrategy = new RoleBasedAuthorizationStrategy() 
    for(Map.Entry<String, RoleMap> roleMapEntry : roleMaps.entrySet()){ 
     Set<Role> roleSet = roleMapEntry.getValue().getRoles() 
     for(Role role : roleSet){ 
      updatedRoleBasedAuthorizationStrategy.addRole(roleMapEntry.getKey(),role); 
      for(String addUserAgain : roleMapEntry.getValue().getSidsForRole(role.getName())){ 
       if(!addUserAgain.equals(removeRolesFromUser)){ 
       updatedRoleBasedAuthorizationStrategy.assignRole(roleMapEntry.getKey(),role,addUserAgain) 
       }else{ 
       println("User : " + removeRolesFromUser + " excluded from role : " + role.getName()) 
       changed=true 
       } 
      } 
     } 
    } 
    if(changed){ 
     Jenkins.getInstance().setAuthorizationStrategy(updatedRoleBasedAuthorizationStrategy) 
     println("INFO: Authorization strategy updated, user " + removeRolesFromUser + " removed from all roles.") 
     Jenkins.getInstance().save(); 
     println("INFO: Authorization strategy saved to disk.") 
    }else{ 
     println("INFO: No changes made to Authorization strategy since user : " + removeRolesFromUser + " does not belong to any role!") 
    } 
}else{ 
    println("ERROR : This script works only for RoleBasedAuthorizationStrategy!") 
} 
+0

Vielen Dank. Es klappt:) –