1、備份
備份可以使用批處理命令解決,實際就是復制當前發布檔案
::備份檔案夾名,使用當前時間 set foldername=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% ::發布目錄 set publishfolder=D:\LastOne\PcApi ::檔案夾不存在 創建 if not exist "%publishfolder%\Backup\" ( md "%publishfolder%\Backup" ) ::創建備份檔案夾 md "%publishfolder%\Backup\%foldername%" ::復制當前發布檔案到備份檔案夾中,排除掉備份檔案及日志檔案 "C:\Windows\System32\robocopy.exe" %publishfolder%\. %publishfolder%\Backup\%foldername%\ /IS /e /XD Backup wwwroot
這一段加到發布命令前,在發布之前,對當前的發布檔案備份
2、回滾
首先我們需要添加一些構建引數
是否回滾

再添加一個選擇備份的下拉框,由于需要動態獲取備份檔案夾的名字,需要借助一些插件來實作
添加Active Choices Plug-in插件,然后添加Active Choices引數


//備份目錄 def folder = "D:\\LastOne\\PcApi\\Backup"; def baseDir = new File(folder); def result = []; files = baseDir.listFiles(); files.each{ x -> result.add(x.getName()) } return result;
效果如下圖

接下來就是回滾了,其實跟備份類似,將之前備份的檔案復制到發布目錄即可
對于dotnetcore來說,用發布檔案更容易,所以備份檔案替換為原始碼
另外,備份檔案只想保留最近的10次,所以在每次備份完成后判斷備份數量,洗掉最早的備份,這里再繼續用批處理檔案寫比較麻煩,可以改用自己熟悉的語言,這里我選擇了Python,寫起來容易些
目錄結構如下

main.py 入口
#!/usr/bin/python # -*- coding: UTF-8 -*- import publish_backup import backup_rollback import argparse #定義引數 parser = argparse.ArgumentParser(description='manual to this script') #發布檔案夾路徑 parser.add_argument('-p', '--publish_folder', type=str, default=None) #備份檔案數量 parser.add_argument('-c', '--folder_count', type=int, default=10) #回滾版本 parser.add_argument('-v', '--version_no', type=str, default=None) #是否回滾 1回滾 parser.add_argument('-i', '--is_rollback', type=int, default=0) #jenkins 獲取代碼目錄 作業目錄 parser.add_argument('-w', '--workspace', type=str, default=None) #發布命令 parser.add_argument('-command', '--publish_command', type=str, default=None) args = parser.parse_args() if args.is_rollback == 1: print("正在回滾") backup_rollback.rollback( args.publish_folder, args.version_no, args.publish_command) else: print("正在發布") publish_backup.backup(args.publish_folder, args.folder_count, args.workspace, args.publish_command) print("結束")
publish_backup.py 備份發布
#!/usr/bin/python # -*- coding: UTF-8 -*- import os import shutil import argparse import datetime #備份發布 def backup(publish_folder, folder_count, workspace, publish_command): backup_path = os.path.join(publish_folder, 'Backup') print(backup_path) folder_name = datetime.datetime.now().strftime("%Y%m%d%H%M%S") # 不存在備份目錄創建 if not os.path.exists(backup_path): os.makedirs(backup_path) shutil.copytree(workspace, os.path.join(backup_path, folder_name), ignore=shutil.ignore_patterns(publish_folder, ".svn", "bin", "obj")) # 獲取檔案夾個數 count = 0 file_name_list = [] for file_name in os.listdir(backup_path): count = count+1 file_name_list.append( datetime.datetime.strptime(file_name, '%Y%m%d%H%M%S')) # 超過folder_count個,則洗掉最早的備份 if count > folder_count: shutil.rmtree(os.path.join(backup_path, min( file_name_list).strftime('%Y%m%d%H%M%S')), ignore_errors=True) print('備份完成') # 發布 os.system('D:') os.system('cd "' + workspace + '"') if os.system(publish_command) == 0: print('發布完成')
backup_rollback.py 回滾
#!/usr/bin/python # -*- coding: UTF-8 -*- import os def rollback(publish_folder, version_no, publish_command): os.system('D:') os.system('cd "{}"'.format(os.path.join( publish_folder, 'Backup', version_no))) if os.system(publish_command) == 0: print('回滾完成')
最后在批處理命令中運行python即可
D:\Python\python.exe D:\Python\Project\publish_netcore\main.py -p D:\LastOne\PcApi -v %BackupVersion% -i %IsRollBack% -w "%WORKSPACE%" -command "dotnet publish LastOne.sln -c Debug /p:PublishProfile=PcApiTest.pubxml /p:Password=111111 /p:AllowUntrustedCertificate=True"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/3771.html
標籤:其他
下一篇:Docker入門介紹
