Я использую Windows Server 2012 для выполнения всех операций Jenkins. Я настроил все в этой текущей удаленной машине. Проблема в том, что мне нужно сделать резервную копию / синхронизировать файлы и конфигурацию с текущего сервера на другой сервер Windows, используя Python. Может кто-нибудь помочь мне в этой теме, пожалуйста.
Ниже приведен код Python для синхронизации файлов на одном компьютере.
import os
import shutil
srcDir = 'Source path '
dstDir = 'Destonation path'
def main():
try:
print("Begin sync")
checkIfRootDirsExist(srcDir, dstDir)
syncDirs(srcDir, dstDir)
syncFiles(srcDir, dstDir)
print("End sync with success")
except Exception as e:
print(e)
print("End sync with failure!")
def checkIfRootDirsExist(rootDir1, rootDir2) :
if (not os.path.exists(rootDir1) and not os.path.isdir(rootDir1)) :
raise Exception(rootDir1 + " doesn't exist")
if (not os.path.exists(rootDir2) and not os.path.isdir(rootDir2)) :
raise Exception(rootDir2 + " doesn't exist")
def syncDirs(rootDir1, rootDir2):
for root1, dirs1, files1 in os.walk(rootDir1):
for relativePath1 in dirs1 :
fullPath1 = os.path.join(root1, relativePath1)
fullPath2 = fullPath1.replace(rootDir1, rootDir2)
if os.path.exists(fullPath2) and os.path.isdir(fullPath2) :
continue
if os.path.exists(fullPath2) and os.path.isfile(fullPath2) :
raise Exception("Cannot perform dir sync." + str(fullPath2) + " should be a dir, not a file!")
# Case 1 : dest dir does not exit
shutil.copytree(fullPath1, fullPath2)
print("Directory " + str(fullPath2) + " copied from " + str(fullPath1))
continue
for root2, dirs2, files2 in os.walk(rootDir2):
for relativePath2 in dirs2:
fullPath2 = os.path.join(root2, relativePath2)
fullPath1 = fullPath2.replace(rootDir2, rootDir1)
if os.path.exists(fullPath1) and os.path.isdir(fullPath1) :
continue
if os.path.exists(fullPath1) and os.path.isfile(fullPath1) :
raise Exception("Cannot perform dir sync." + str(fullPath1) + " should be a dir, not a file!")
# Case 3 : dest dir exists but not src dir, so we need to copy it
shutil.copytree(fullPath2, fullPath1)
print("Directory " + str(fullPath1) + " copied from" + str(fullPath2))
continue
def syncFiles(rootDir1, rootDir2):
for root1, dirs1, files1 in os.walk(rootDir1):
for file1 in files1:
fullPath1 = os.path.join(root1, file1)
fullPath2 = fullPath1.replace(rootDir1, rootDir2)
# Case 1 : the file does not exist in dest dir
if (not os.path.exists(fullPath2)) :
shutil.copy2(fullPath1, fullPath2)
print("File " + str(fullPath2) + " copied from " + str(fullPath1))
continue
# Case 2 : src file is more recent than dest file
file1LastModificationTime = round(os.path.getmtime(fullPath1))
file2LastModificationTime = round(os.path.getmtime(fullPath2))
if (file1LastModificationTime > file2LastModificationTime):
os.remove(fullPath2)
shutil.copy2(fullPath1, fullPath2)
print("File " + str(fullPath2) + " synchronized from " + str(fullPath1))
continue
# Case 3 : dest file is more recent than src file
if (file1LastModificationTime < file2LastModificationTime):
os.remove(fullPath1)
shutil.copy2(fullPath2, fullPath1)
print("File " + str(fullPath1) + " synchronized from " + str(fullPath2))
continue
# Case 4 : file only exists in dest dir but not in src
# So, we copy it back to src dir
for root2, dirs2, files2 in os.walk(rootDir2):
for file2 in files2:
fullPath2 = os.path.join(root2, file2);
fullPath1 = fullPath2.replace(rootDir2, rootDir1);
if (os.path.exists(fullPath1)):
continue
shutil.copy2(fullPath2, fullPath1)
print("File " + str(fullPath1) + " copied from " + str(fullPath2))
if __name__ == '__main__':
main()
This is for WIndows Server 2012 (both the sides)
Running JEnkins latest veresion. i have tried in my local system and it works.
below is the python code to sync files in the same machine.
import os
import shutil
srcDir = 'Source path '
dstDir = 'Destonation path'
def main():
try:
print("Begin sync")
checkIfRootDirsExist(srcDir, dstDir)
syncDirs(srcDir, dstDir)
syncFiles(srcDir, dstDir)
print("End sync with success")
except Exception as e:
print(e)
print("End sync with failure!")
def checkIfRootDirsExist(rootDir1, rootDir2) :
if (not os.path.exists(rootDir1) and not os.path.isdir(rootDir1)) :
raise Exception(rootDir1 + " doesn't exist")
if (not os.path.exists(rootDir2) and not os.path.isdir(rootDir2)) :
raise Exception(rootDir2 + " doesn't exist")
def syncDirs(rootDir1, rootDir2):
for root1, dirs1, files1 in os.walk(rootDir1):
for relativePath1 in dirs1 :
fullPath1 = os.path.join(root1, relativePath1)
fullPath2 = fullPath1.replace(rootDir1, rootDir2)
if os.path.exists(fullPath2) and os.path.isdir(fullPath2) :
continue
if os.path.exists(fullPath2) and os.path.isfile(fullPath2) :
raise Exception("Cannot perform dir sync." + str(fullPath2) + " should be a dir, not a file!")
# Case 1 : dest dir does not exit
shutil.copytree(fullPath1, fullPath2)
print("Directory " + str(fullPath2) + " copied from " + str(fullPath1))
continue
for root2, dirs2, files2 in os.walk(rootDir2):
for relativePath2 in dirs2:
fullPath2 = os.path.join(root2, relativePath2)
fullPath1 = fullPath2.replace(rootDir2, rootDir1)
if os.path.exists(fullPath1) and os.path.isdir(fullPath1) :
continue
if os.path.exists(fullPath1) and os.path.isfile(fullPath1) :
raise Exception("Cannot perform dir sync." + str(fullPath1) + " should be a dir, not a file!")
# Case 3 : dest dir exists but not src dir, so we need to copy it
shutil.copytree(fullPath2, fullPath1)
print("Directory " + str(fullPath1) + " copied from" + str(fullPath2))
continue
def syncFiles(rootDir1, rootDir2):
for root1, dirs1, files1 in os.walk(rootDir1):
for file1 in files1:
fullPath1 = os.path.join(root1, file1)
fullPath2 = fullPath1.replace(rootDir1, rootDir2)
# Case 1 : the file does not exist in dest dir
if (not os.path.exists(fullPath2)) :
shutil.copy2(fullPath1, fullPath2)
print("File " + str(fullPath2) + " copied from " + str(fullPath1))
continue
# Case 2 : src file is more recent than dest file
file1LastModificationTime = round(os.path.getmtime(fullPath1))
file2LastModificationTime = round(os.path.getmtime(fullPath2))
if (file1LastModificationTime > file2LastModificationTime):
os.remove(fullPath2)
shutil.copy2(fullPath1, fullPath2)
print("File " + str(fullPath2) + " synchronized from " + str(fullPath1))
continue
# Case 3 : dest file is more recent than src file
if (file1LastModificationTime < file2LastModificationTime):
os.remove(fullPath1)
shutil.copy2(fullPath2, fullPath1)
print("File " + str(fullPath1) + " synchronized from " + str(fullPath2))
continue
# Case 4 : file only exists in dest dir but not in src
# So, we copy it back to src dir
for root2, dirs2, files2 in os.walk(rootDir2):
for file2 in files2:
fullPath2 = os.path.join(root2, file2);
fullPath1 = fullPath2.replace(rootDir2, rootDir1);
if (os.path.exists(fullPath1)):
continue
shutil.copy2(fullPath2, fullPath1)
print("File " + str(fullPath1) + " copied from " + str(fullPath2))
if __name__ == '__main__':
main()
Expected results: the python code should help in syncing the files from Source directory( Windows server 2012) to another(Windows server 2012)
ex: if 10 files are available in both the servers and 2 files are added in Source server, the same has to be added in dest server ( NO less no more )