// MngJenkinsUtils.groovy
// 젠킨스 관리를 위한 메서드를 구현
def getAllUserJobAndFolderPermissions() {
def jenkins = Jenkins.getInstanceOrNull()
if (jenkins == null) {
println "[ERROR] Jenkins 인스턴스를 가져올 수 없습니다."
return [:]
}
def permissions = [:]
User.getAll().each { user ->
def userId = user.getId()
if (userId == null || userId.trim().isEmpty()) return
def userName = user.getFullName()
def userPermissions = [:]
try {
def userAuth = user.impersonate()
// 폴더 권한 조회
jenkins.getAllItems(Folder.class).each { folder ->
try {
def folderPermissions = []
def acl = folder.getACL()
if (acl.hasPermission(userAuth, Item.READ)) {
folderPermissions.add("Read")
}
if (acl.hasPermission(userAuth, Item.BUILD)) {
folderPermissions.add("Build")
}
if (acl.hasPermission(userAuth, Item.CANCEL)) {
folderPermissions.add("Cancel")
}
if (!folderPermissions.isEmpty()) {
userPermissions.put(folder.getFullName(), folderPermissions)
}
} catch (Exception e) {
println "[WARNING] Folder '${folder.getFullName()}' 권한 조회 중 오류 발생: ${e.message}"
}
}
// Job 권한 조회
jenkins.getAllItems(Job.class).each { job ->
try {
def jobPermissions = []
def acl = job.getACL()
if (acl.hasPermission(userAuth, Item.READ)) {
jobPermissions.add("Read")
}
if (acl.hasPermission(userAuth, Item.BUILD)) {
jobPermissions.add("Build")
}
if (acl.hasPermission(userAuth, Item.CANCEL)) {
jobPermissions.add("Cancel")
}
if (!jobPermissions.isEmpty()) {
userPermissions.put(job.getFullName(), jobPermissions)
}
} catch (Exception e) {
println "[WARNING] Job '${job.getFullName()}' 권한 조회 중 오류 발생: ${e.message}"
}
}
} catch (Exception e) {
println "[ERROR] 사용자 '${userId}'의 인증 정보를 가져오는 중 오류 발생: ${e.message}"
return
}
if (!userPermissions.isEmpty()) {
permissions.put(userId, [userName: userName, permissions: userPermissions])
}
}
return permissions
}
def generateUserJobPermissionsCsv(String outputFilePath) {
def permissions = getAllUserJobAndFolderPermissions()
def csvContent = new StringBuilder()
// UTF-8 BOM 추가 (Excel에서 한글 깨짐 방지)
csvContent.append("\uFEFF")
csvContent.append("사용자 ID,사용자 이름,Job 이름,권한\n")
permissions.each { userId, userData ->
def userName = userData.userName // 사용자 이름을 userData에서 가져옴
def jobs = userData.permissions // 사용자 권한 정보
jobs.each { job, jobPermissions ->
def permissionsString = jobPermissions ? jobPermissions.join(",") : "없음"
echo "${userId}, ${userName}, ${job}, ${permissionsString}"
csvContent.append("${userId},${userName},${job},${permissionsString}\n")
}
}
// UTF-8 인코딩으로 파일 저장
writeFile file: outputFilePath, text: csvContent.toString(), encoding: 'UTF-8'
echo "[INFO] 권한 조회 결과가 CSV 파일로 저장되었습니다: ${outputFilePath}"
archiveArtifacts artifacts: "*.csv", fingerprint: true
}
return this
```