2016-08-03 4 views
0

Я пытаюсь автоматизировать удаление пользователя Jenkins. Скрипт Groovy, который я пробовал, приведен ниже.Удалить пользователя из Jenkins через groovy script, когда используется стратегия на основе ролей

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

Упомянутый заводной сценарий не удаляется, когда пользователь LDAP интегрирован. Также область безопасности, которая используется, - это стратегия на основе ролей.

Пожалуйста, предложите

+0

Я протестировал один и тот же сценарий для стратегии на основе ролей, и он удалил пользователя успешно. Не могли бы вы сообщить нам, как вы выполняете строгий скрипт? Кроме того, размещайте содержимое своего скрипта здесь. –

+0

Ниже приведен сценарий, который я использую, чтобы удалить пользователя из 'Jenkins.import hudson.model.User Пользователь u = User.get (id) u.delete()' –

+0

Также я запускаю скрипт из консоли сценариев , Идентификатор получил значение в скрипте, с которым создается пользователь. Также пользователь не поддерживается в внутренней базе данных Jenkins. Пользователь аутентифицирован против LDAP. –

ответ

0

В приведенной ниже заводной сценарий должен создать новый экземпляр RoleBasedAuthorizationStrategy за исключением данного пользователя из всех ролей.

Обратите внимание, что я не тестировал его полностью и не заставляю делать резервную копию вашего экземпляра Jenkins перед тестированием этого скрипта.

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

Большое спасибо. Оно работает:) –