This script helps to move artifacts from one location to another without overwriting any file.
import os, shutil, re STALE_ARTIFACT_DIRECTORY = "/home/user/atlassian-home/artifacts/" # Path to the Home directory artifacts ARTIFACT_DIRECTORY = "/home/user/atlassian-home/shared/artifacts" # Path to Shared directory artifact list_of_migrated_artifacts =[] # If the path to an artifact location does not exist in {BAMBOO-HOME}/shared directory but exist {BAMBOO-HOME}/artifact directory, we consider it as an artifact that needs to be moved def is_artifacts_present_in_current_plans(storage_tag='',plan_artifact='', type=''): # Construct a path to Bamboo artifact storage in plan storag tag storage_path = '{0}/{1}/{2}'.format(ARTIFACT_DIRECTORY,storage_tag,type) if os.path.exists(storage_path): # check if artifact exist in the path artifact_path = '{0}/{1}/{2}/{3}'.format(ARTIFACT_DIRECTORY,storage_tag,type,plan_artifact) stale_artifact_path = '{0}{1}/{2}/{3}'.format(STALE_ARTIFACT_DIRECTORY,storage_tag,type,plan_artifact) # If the artifact exist in {BAMBOO-HOME}/shared directory, do nothing if os.path.exists(artifact_path): x = None else: shutil.move(stale_artifact_path,storage_path) result = {"Moved": stale_artifact_path, "to":storage_path} list_of_migrated_artifacts.append(result) else: stale_plan_storage= '{0}{1}'.format(STALE_ARTIFACT_DIRECTORY,storage_tag) main_plan_storage = '{0}/{1}'.format(ARTIFACT_DIRECTORY,storage_tag) # Move the storage path and all its directories to {BAMBOO-HOME}/shared/artifacts/... if not os.path.exists(main_plan_storage): tmp_stale_storage = '{0}{1}'.format(STALE_ARTIFACT_DIRECTORY,storage_tag) tmp_main_plan_storage = '{0}/{1}'.format(ARTIFACT_DIRECTORY,storage_tag) shutil.move(tmp_stale_storage,tmp_main_plan_storage) result = {"Moved":tmp_stale_storage, "to":tmp_main_plan_storage} list_of_migrated_artifacts.append(result) else: _tmp_stale_storage = '{0}{1}/{2}'.format(STALE_ARTIFACT_DIRECTORY,storage_tag,type) tmp_main_plan_storage = '{0}/{1}'.format(ARTIFACT_DIRECTORY,storage_tag) shutil.move(_tmp_stale_storage,tmp_main_plan_storage) result = {"Moved":_tmp_stale_storage,"to":tmp_main_plan_storage} list_of_migrated_artifacts.append(result) return def prepare_artifacts_directories(): try: for storage_tag in os.listdir(STALE_ARTIFACT_DIRECTORY): # list all storage tags in artifact directory # {storage_tag} storage_path = os.path.join(STALE_ARTIFACT_DIRECTORY, storage_tag) # create a path to the storage tags /Users/voseghale/atlassian-home/bamboo803/artifacts/{storage_tag} if os.path.isdir(storage_path): for x in os.listdir(storage_path): # get all shared and none shared artifacts is_shared_artifacts = re.match(r'shared',x) if is_shared_artifacts: # # Get all shared artifacts shared_artifact_path = os.path.join(storage_path,x) # create the path to shared if os.path.isdir(shared_artifact_path): for artifact_ in os.listdir(shared_artifact_path): # list each artifact in a shared path path_to_each_artifact = os.path.join(shared_artifact_path,artifact_) if os.path.isdir(path_to_each_artifact): result = is_artifacts_present_in_current_plans(storage_tag=storage_tag,plan_artifact=artifact_, type=x) else: # Get all none shared artifacts share_artifact_path = os.path.join(storage_path,x) # create the path to shared if os.path.isdir(share_artifact_path): for artifact_ in os.listdir(share_artifact_path): # list each artifact in a shared path path_to_each_artifact = os.path.join(share_artifact_path,artifact_) if os.path.isdir(path_to_each_artifact): result = is_artifacts_present_in_current_plans(storage_tag=storage_tag,plan_artifact=artifact_, type=x) print("---- Artifacts Copied ----") print(list_of_migrated_artifacts) except FileNotFoundError as err: print(err) return if __name__== "__main__": prepare_artifacts_directories()
VICTOR-OSEGHALE
1 comment