diff --git a/ci/jobgenerator.py b/ci/jobgenerator.py index c8a5c5c..07851a4 100755 --- a/ci/jobgenerator.py +++ b/ci/jobgenerator.py @@ -16,6 +16,7 @@ # along with this program. If not, see . import git +import time from os import getenv, path from yaml import CLoader from yaml import load as yaml_load @@ -173,6 +174,38 @@ class Generator: return package_config + def get_existing_jenkins_jobs(self, server): + """This returns a tuple of all existing Jenkins jobs + + This is separated into a different function to make the code slightly + more efficient and clean. With generators being difficult to work with + and the need for several high-volume variables, this makes sense. + """ + + # Start a timer + t_start = time.perf_counter() + print("Getting list of existing Jenkins jobs...") + + # Get the generator object with the jobs and create an empty list + s_jobs = server.get_jobs() + jobs = [] + + # The list from the server is in the following format: + # [('JOBNAME', )] + # We only want JOBNAME, so let's put that in jobs + for job_name in s_jobs: + jobs.append(job_name[0]) + + # Make sure jobs is a tuple + jobs = tuple(jobs) + + # Stop the timer and log the time + t_end = time.perf_counter() + print(f"Finished in {t_end - t_start:0.4f} seconds.") + + return jobs + + def create_jenkins_jobs(self): """Interface with Jenkins to create the jobs required @@ -189,14 +222,11 @@ class Generator: # Authenticate to the Jenkins server server = self.auth_jenkins_server() - # Iterate through the packages we have in our metadata and update the - # job config for each if they match. If there's no existing job found, - # just create it + # Parse the metadata metadata = self.parse_metadata() - jobs = [] - for job_name in server.get_jobs(): - jobs.append(job_name) + # Get a list of existing jobs + jobs = self.get_existing_jenkins_jobs(server) total_rel = set() @@ -229,7 +259,7 @@ class Generator: package) if job_name in jobs: job = server.get_job(job_name) - print(job.update_config(package_config, full_response=True)) + print(job.update_config(str(package_config), full_response=True)) else: job = server.create_job(job_name, str(package_config))