Save jobs artifacts to files
Change-Id: Ia0966c7bfe2ab47edb7ed6ff53aaabec7194fbb8
Related-prod: PROD-29326
diff --git a/save_jenkins_console/save_jenkins_console/jenkins_api.py b/save_jenkins_console/save_jenkins_console/jenkins_api.py
index c20c5a0..d2f21c5 100644
--- a/save_jenkins_console/save_jenkins_console/jenkins_api.py
+++ b/save_jenkins_console/save_jenkins_console/jenkins_api.py
@@ -1,4 +1,5 @@
import config
+import os
import requests
import time
import utils
@@ -38,7 +39,6 @@
self.job = self.server.get_job(pipeline_job_name)
self.pipeline_job_name = pipeline_job_name
-
def get_all_jobs_ids(self):
"""
Gets all the builds ID's for the particular job name.
@@ -60,6 +60,33 @@
except requests.exceptions.HTTPError:
logger.warning('404 Client Error: Not Found for url')
+ def manage_build_artifacts(self, job_build, build, build_date):
+ build_artifacts = job_build.get_artifacts()
+
+ for build_artfact in build_artifacts:
+ if build_artfact:
+ patch_to_artifact_file = utils.generate_patch_to_artifact_file(
+ logs_directory=LOGS_DIRECTORY,
+ job_name=self.pipeline_job_name)
+ saved_artifact_file_patch = build_artfact.save_to_dir(
+ patch_to_artifact_file)
+ # rename saved file
+
+ new_artifact_file_patch = utils.generate_artifact_file_patch(
+ saved_artifact_file_patch=saved_artifact_file_patch,
+ patch_to_artifact_file=patch_to_artifact_file,
+ pipeline_job_name=self.pipeline_job_name,
+ build_id=build,
+ build_date=build_date)
+ if not utils.check_if_file_exists(patch_to_file=new_artifact_file_patch):
+ new_artifact_filename = utils.rename_artifact_file(
+ old_artifact_file_patch=saved_artifact_file_patch,
+ new_artifact_file_patch=new_artifact_file_patch)
+ logger.info(
+ f'new_artifact_filename: {new_artifact_filename}')
+
+ if utils.check_if_file_exists(patch_to_file=saved_artifact_file_patch):
+ os.remove(saved_artifact_file_patch)
def get_build_artifacts(self, jobs_ids_list):
"""
@@ -93,10 +120,15 @@
len(jobs_ids_list)))
build_counter += 1
- # When job finished
+ # When job is finished
job_timestamp = job_build.get_timestamp().timestamp()
build_date = utils.get_date_from_timestamp(job_timestamp)
+ # save build artifacts
+ self.manage_build_artifacts(job_build=job_build,
+ build=build,
+ build_date=build_date)
+
# Save data th the file
utils.save_job_console_to_file(
logs_directory=LOGS_DIRECTORY,
diff --git a/save_jenkins_console/save_jenkins_console/utils.py b/save_jenkins_console/save_jenkins_console/utils.py
index 163a46c..1f3ac90 100644
--- a/save_jenkins_console/save_jenkins_console/utils.py
+++ b/save_jenkins_console/save_jenkins_console/utils.py
@@ -174,16 +174,21 @@
save_to_file(filename=filename, data_to_write=data_to_write)
-def archive_files(files_to_archive, patch_to_archive):
- """
- Archives files
-
- :param files_to_archive: list
- :param patch_to_archive: string
-
- :return: full patch + name to archive
- """
-
- pass
+def generate_patch_to_artifact_file(logs_directory, job_name):
+ return '{0}{1}/'.format(logs_directory, job_name)
+def generate_artifact_file_patch(saved_artifact_file_patch,
+ patch_to_artifact_file,
+ pipeline_job_name,
+ build_id,
+ build_date):
+ artifact_extention = saved_artifact_file_patch.split('.')[-1]
+ filename = f'{str(build_id)}_{build_date}_{pipeline_job_name}.{artifact_extention}'
+ full_patch = patch_to_artifact_file + filename
+ return full_patch
+
+
+def rename_artifact_file(old_artifact_file_patch, new_artifact_file_patch):
+ os.rename(old_artifact_file_patch, new_artifact_file_patch)
+ return new_artifact_file_patch