Привет всем!
Я столкнулся с ошибкой в Jenkins, и мне нужна ваша помощь. При запуске моего скрипта появляется следующая ошибка:
"caught: BUG! exception in phase 'semantic analysis' in source unit version 65 jenkins"
Хотел создать билд в дженкинсе который будет при указании OU в AD показывать пользователей из этого OU, и чтобы данный параметр применялся в скрипте PowerShell.
Сам скрипт Powershell сбрасывает пароль пользователя, и с ним все хорошо. Но вот Jenkins выдает ошибку:(
Пробовал добавлять путь к Java в System Environment Variables, но все еще получаю такую ошибку.
JDK стоит 21-й версии,в инете загуглил и предлагают 11-ю поставить, буду пробовать этот метод также.
Сам скрипт:
1. Для поиска OU
import javax.naming.Context
import javax.naming.directory.InitialDirContext
import javax.naming.directory.SearchControls
import groovy.json.JsonOutput
def ldapUrl = 'ldap://domain.com:389'
def ldapBase = 'DC=domain,DC=com'
def ldapUser = 'CN=admin,DC=domain,DC=com'
def ldapPassword = 'Password'
Hashtable<String, String> ldapEnv = new Hashtable<String, String>()
ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory")
ldapEnv.put(Context.PROVIDER_URL, ldapUrl)
ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple")
ldapEnv.put(Context.SECURITY_PRINCIPAL, ldapUser)
ldapEnv.put(Context.SECURITY_CREDENTIALS, ldapPassword)
def ctx = new InitialDirContext(ldapEnv)
def searchControls = new SearchControls()
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE)
def results = ctx.search(ldapBase, "(objectClass=organizationalUnit)", searchControls)
def ouList = []
while (results.hasMore()) {
def result = results.next()
def dn = result.getNameInNamespace()
ouList.add(dn)
}
return JsonOutput.toJson(ouList)
2. Для поиска пользователей из этого OU:
import javax.naming.Context
import javax.naming.directory.InitialDirContext
import javax.naming.directory.SearchControls
import groovy.json.JsonOutput
def ldapUrl = 'ldap://domain.com:389'
def ldapBase = params['OU_Selection']
def ldapUser = 'CN=admin,DC=domain,DC=com'
def ldapPassword = 'your-password'
Hashtable<String, String> ldapEnv = new Hashtable<String, String>()
ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory")
ldapEnv.put(Context.PROVIDER_URL, ldapUrl)
ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple")
ldapEnv.put(Context.SECURITY_PRINCIPAL, ldapUser)
ldapEnv.put(Context.SECURITY_CREDENTIALS, ldapPassword)
def ctx = new InitialDirContext(ldapEnv)
def searchControls = new SearchControls()
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE)
def results = ctx.search(ldapBase, "(objectClass=user)", searchControls)
def userList = []
while (results.hasMore()) {
def result = results.next()
def cn = result.attributes.get("cn").get()
userList.add(cn)
}
return JsonOutput.toJson(userList)
Понимаю, что Jenkins не совсем предназначен для таких целей, но большая часть задач нашей HelpDesk команды уже реализована через него, и они просят улучшить параметры билдов под такой формат.