diff --git a/app/models/jenkins_setting.rb b/app/models/jenkins_setting.rb index 5c58378..8c20f5d 100644 --- a/app/models/jenkins_setting.rb +++ b/app/models/jenkins_setting.rb @@ -22,7 +22,7 @@ def test_connection def get_jobs_list - jenkins_client.get_jobs_list + jenkins_client.get_available_jobs end diff --git a/app/services/jenkins_client.rb b/app/services/jenkins_client.rb index 1b43d48..28577f8 100644 --- a/app/services/jenkins_client.rb +++ b/app/services/jenkins_client.rb @@ -26,7 +26,7 @@ def test_connection test[:errors] = [] begin - test[:jobs_count] = connection.job.list_all.size + test[:jobs_count] = get_available_jobs.size rescue => e test[:jobs_count] = 0 test[:errors] << e.message @@ -52,4 +52,29 @@ def number_of_builds_for(job_name) connection.job.list_details(job_name)['builds'].size rescue 0 end + + def get_available_jobs + filter_job_names(search_in_depth).sort + end + + + def filter_job_names(list) + names = [] + list.each { |item| + if item.key?("jobs") + filter_job_names(item["jobs"]).map { |child| + names << item["name"] + "/job/" + child + } + else + names << item["name"] + end + } + return names + end + + + def search_in_depth + connection.api_get_request("", "tree=jobs[name,jobs[name,jobs[name]]]")["jobs"] + end + end