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"

 

自动化部署-Jenkins备份回滚的更多相关文章

  1. 持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本

    持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本 一:本文通过jenkins调用shell脚本的的方式完成从Git服务器获取代码.打包.部署到web服务器.将web服务器从负 ...

  2. jenkins结合脚本实现代码自动化部署及一键回滚至上一版本

    持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本 一:本文通过jenkins调用shell脚本的的方式完成从Git服务器获取代码.打包.部署到web服务器.将web服务器从负 ...

  3. Jenkins实现生产环境部署文件的回滚操作(Windows)

    由于dotnet项目的生产环境环境部署工具比较少,所以我使用jenkins作为生产环境的自动化部署工具. 既然有回滚操作,那么就会有部署操作:要实现回滚,先要实现部署的操作,我在jenkins搭建了一 ...

  4. Jenkins发布回滚方案

    Jenkins回滚可以通过每次发布从主干打tag,然后发布的时候发tag,比如tag, v1, v2,v3 如果我发布了v3,想要回滚回v2,直接在Jenkins中选择v2的tag地址重新构建就可以回 ...

  5. 用Helm部署Kubernetes应用,支持多环境部署与版本回滚

    1 前言 Helm是优秀的基于Kubernetes的包管理器.利用Helm,可以快速安装常用的Kubernetes应用,可以针对同一个应用快速部署多套环境,还可以实现运维人员与开发人员的职责分离.现在 ...

  6. 自动化部署-Jenkins+SVN+MSBuild

    这篇文章主要介绍下使用Jenkins实现自动化部署 下载 https://jenkins.io/download/ 安装 按步骤安装即可,下载的是windows版本,安装完成后,会看到这样一个正在运行 ...

  7. Java项目多版本部署及快速回滚(含完整命令)

    1. 场景描述 java项目linux环境下快速部署,以前介绍过,今天主要结合linux的软连接,实现版本的快速切换(回滚),包含完整的start.sh与stop.sh,只需修改包名和路径即可运行,有 ...

  8. 项目测试环境自动化部署[jenkins前后端配置、Nginx配置]

    持续部署:关注点在于项目功能部署到服务器后可以正常运行,为下一步测试环节或最终用户正式使用做准备.(问题点:一个环节有问题,其他环节跟着有问题) 持续集成:关注点是在于尽早发现项目整体运行问题,尽早解 ...

  9. 自动化部署--Jenkins

    自动化部署--Jenkins--简介安装(一) https://www.jianshu.com/p/b9ce206139f1 自动化部署--Jenkins--Maven构建(二)  https://w ...

随机推荐

  1. c# 第37节 接口的实现与继承

    本节内容: 1:接口继承注意 2:开发封闭原则: 3:实例解释接口的作用 1:接口继承注意 接口的继承: :类继承具有单根性,接口可多重继承: :接口继承多个接口的时候,派生接口名与父接口用冒号隔开, ...

  2. 1【西北师大-2108Java】第一次作业成绩汇总

    [西北师大-2108Java]第一次作业成绩汇总 经过本次作业的练习,了解了Java最基本的知识和Java的发展:了解了Java到底是一门怎样的语言,也知道了学习Java的乐趣,懂得了去选择Java开 ...

  3. cookie、session、token的区别与联系

    https://www.cnblogs.com/moyand/p/9047978.html cookie.session.token存在意义 http协议是无状态协议,请求之间是没有联系的,cooki ...

  4. BZOJ2073 「POI2004」PRZ 状压DP

    问题描述 BZOJ2073 题解 发现 \(n \le 16\) ,显然想到状压 设 \(opt[S]\) 代表过河集合为 \(S\) 时,最小时间. 枚举 \(S\) 的子集,进行转移 枚举子集的方 ...

  5. ionic4之ion-sliders

    <ion-content class="details_"> <img class="courimg_" src="assets/i ...

  6. 设计模式-Prototype(通过复制构造函数实现自我复制)-(创建型模式)

    以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Prototype.h #pragma once class Prototype { public: virtual ~P ...

  7. 机器学习之KNN

    KNN做回归和分类的主要区别在于最后做预测时候的决策方式不同.KNN做分类预测时,一般是选择多数表决法,即训练集里和预测的样本特征最近的K个样本,预测为里面有最多类别数的类别.而KNN做回归时,一般是 ...

  8. gradle初学可能遇到的问题

    gradle的脚本文件名称必须是build.gradle,如果自学的时候随便起的名字测试.如:test.gradle,脚本执行的时候是找不到相对于的任务的.会报错

  9. Unity Profiler 记录

    版本 Unity 2018.4.6f1 空包 development build 魅蓝 note3 OPPO R9 VIVO x9 华为 P8 青春版 小米 8 SE iphone se Other ...

  10. Zuul中聚合Swagger的坑

    每个服务都有自己的接口,通过Swagger来管理接口文档.在服务较多的时候我们希望有一个统一的入口来进行文档的查看,这个时候可以在zuul中进行文档的聚合显示. 下面来看下具体的整合步骤以及采坑记录. ...