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
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
1 comment