jenkins 設定されている すべての job から 情報取得修正版

```
import jenkins.model.Jenkins 
import hudson.model.* 
import groovy.json.JsonBuilder 
import hudson.plugins.git.GitSCM 
import com.cloudbees.hudson.plugins.folder.Folder 

// ログ出力ディレクトリの作成
def logDir = new File('/root/Jenkins_log')
if (!logDir.exists()) {
    logDir.mkdirs()
}

// 結果を保存するマップ
def jobConfigs = [:] 
def filteredJobConfigs = [:] 

// すべてのジョブを取得 
Jenkins.instance.getAllItems(AbstractItem.class).each { job -> 
    def config = [:] 
    try { 
        // 基本情報の取得 
        config.name = job.name 
        config.fullName = job.fullName 
        config.url = job.absoluteUrl 
        config.description = job.description 
        
        // ジョブタイプの判定 
        config.jobType = job.getClass().simpleName 
        
        // フォルダとジョブで処理を分ける
        if (job instanceof Folder) {
            // フォルダの場合の処理
            config.type = 'Folder'
            jobConfigs[job.fullName] = config
        } else {
            // ジョブの場合の処理
            config.type = 'Job'
            
            // ビルドトリガーの取得 
            def triggers = [] 
            if (job.hasProperty('triggers')) { 
                job.triggers.each { trigger -> 
                    triggers << [ 
                        type: trigger.key.getClass().simpleName, 
                        spec: trigger.value.spec 
                    ] 
                } 
            } 
            config.triggers = triggers 
            
            // SCM情報の取得 
            if (job.hasProperty('scm')) { 
                def scm = [:] 
                if (job.scm instanceof GitSCM) { 
                    scm.type = 'Git' 
                    scm.repositories = job.scm.repositories.collect { repo -> 
                        [ 
                            url: repo.URIs[0].toString(), 
                            branches: repo.getBranches().collect { it.name } 
                        ] 
                    } 
                } else { 
                    scm.type = job.scm.getClass().simpleName 
                } 
                config.scm = scm 
            } 
            
            // ビルド後の動作の取得
            if (job.hasProperty('publishers')) { 
                config.publishers = job.publishers.collect { publisher -> 
                    [ type: publisher.getClass().simpleName ] 
                } 
            } 
            
            // ビルドステップの取得（フリースタイルプロジェクトの場合） 
            if (job instanceof FreeStyleProject) { 
                config.buildSteps = job.builders.collect { builder -> 
                    [ 
                        type: builder.getClass().simpleName, 
                        command: builder.hasProperty('command') ? builder.command : null 
                    ] 
                } 
            } 
            
            // パラメータの取得 
            if (job.hasProperty('properties')) { 
                def params = job.properties.findAll { it.class.simpleName == 'ParametersDefinitionProperty' } 
                config.parameters = params.collect { param -> 
                    param.parameterDefinitions.collect { 
                        [ 
                            name: it.name, 
                            type: it.getClass().simpleName, 
                            defaultValue: it.defaultValue, 
                            description: it.description 
                        ] 
                    } 
                }.flatten() 
            }
            
            jobConfigs[job.fullName] = config 
            
            // 最新の成功ビルドの確認（ジョブの場合のみ）
            if (job.hasProperty('lastSuccessfulBuild')) {
                def lastSuccessfulBuild = job.getLastSuccessfulBuild()
                if (lastSuccessfulBuild != null && lastSuccessfulBuild.number != '-') { 
                    filteredJobConfigs[job.fullName] = config
                    config.lastSuccessfulBuild = [
                        number: lastSuccessfulBuild.number,
                        timestamp: lastSuccessfulBuild.timestamp,
                        result: lastSuccessfulBuild.result.toString()
                    ]
                }
            }
        }
    } catch (Exception e) { 
        println "Error processing ${job.fullName}: ${e.message}" 
        // エラーログを別ファイルに出力
        new File("${logDir}/error_log.txt").append("Error processing ${job.fullName}: ${e.message}\n")
    } 
} 

// 結果をJSON形式で出力 
def json = new JsonBuilder(jobConfigs).toPrettyString() 
new File("${logDir}/jenkins_job_configs.json").text = json 
println "設定情報の取得が完了しました。${logDir}/jenkins_job_configs.jsonに保存されました。" 

// フィルタリングされた結果をJSON形式で出力 
def filteredJson = new JsonBuilder(filteredJobConfigs).toPrettyString() 
new File("${logDir}/filtered_jenkins_job_configs.json").text = filteredJson 
println "フィルタリングされた設定情報の取得が完了しました。${logDir}/filtered_jenkins_job_configs.jsonに保存されました。"
```