用批处理来自动化项目编译及部署(附Demo)
阅读目录
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。
介绍
一个项目从立项开始,可能就已经根据公司的配置模板将目录,文档结构定义出来。有动态库,也有静态库,在没有专门的CMO的时候,往往组长,若干开发人员承担版本发布的工作。次工作即枯燥,又容易出错,那么怎么样才能将这样的工作略微自动化点。以下就通过很简单的很古老的批处理来略微自动化下。
详细
一:目录结构
每个公司的目录结构不一样,当略有相同,比如:管理库,需求库,设计库,代码库,引用库(包库),资源库,编译模板库,编译版本库,发布版本库等。
如下图:
二:生成临时版本流程:
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。
一般的比较正规的是:发布人员获取所以同步,然后编译,然后将编译的release下的各个文件夹拷贝出来,做记录,放到临时版本库中。也有筒靴可能会说,自己把项目的编译生成路径改到对应的地方不就OK了,虽然可以,但有时候情况比较特殊,比如都是插件开发,把路径改了,就不好调试了,不可能每个多附加进程调试吧。
所以我们要解决的是怎么通过批处理来进行自动化编译和将编译完成文件复制到对应目录。
三:批处理
后缀为.bat的文件就是批处理文件。以下就对比较长用到的命令做个简单描述:
echo 和 @回显控制命令
echo off #从下一行开始关闭回显
echo on #从下一行开始打开回显
md创建目录
md abc #在当前目录里建立子目录 abc
md d:\a\b\c #如果 d:\a 不存在,将会自动创建
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。
copy拷贝文件
copy c:\test.txt d:\复制 c:\test.txt 文件到 d:\
copy c:\test.txt d:\test.bak复制 c:\test.txt 文件到 d:\ ,并重命名为 test.bak
copy c:\*.*复制 c:\ 所有文件到当前目录,不包括隐藏文件和系统文件不指定目标路径,则默认目标路径为当前目录
copy con test.txt从屏幕上等待输入,按 Ctrl+Z 结束输入,输入内容存为test.txt文件con代表屏幕,prn代表打印机
pause暂停命令
运行该命令时,将显示下面的消息:请按任意键继续 . . .
一般用于看清楚屏幕上显示的内容
set设置变量
引用变量可在变量名前后加 % ,即 %变量名%
set #显示目前所有可用的变量,包括系统变量和自定义的变量
echo %SystemDrive% #显示系统盘盘符。系统变量可以直接引用
set p #显示所有以p开头的变量,要是一个也没有就设errorlevel=1
set p=aa1bb1aa2bb2 #设置变量p,并赋值为 = 后面的字符串,即aa1bb1aa2bb2
echo %p% #显示变量p代表的字符串,即aa1bb1aa2bb2
处理
一:模拟场景
现建有马戏团项目(Circus),项目中有Circus工程,Cat工程,Dog工程。
Circus是用来进行表演的。Circus不引用Cat,Dog(用接口,但先不定义接口)
Cat是猫动物的表演技能。
Dog是狗动物的表演技能。
先假设输出目录中有Circus主目录,主目录下有Driver子目录,Cat和Dog的编译输出均在Driver下,并且以自己本身的名字建个目录。
二:构建项目
三:编写bat文件
设置输出路径
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。
- “debugOrRelease”这个变量是来控制是编译debug还是release
- @echo off
- set debugOrRelease=Release
- set baseOutPath=..\.临时版本\Circus\%debugOrRelease%
- set driverOutPath=%baseOutPath%\Config
- set catPath=%driverOutPath%\Cat
- set dogPath=%driverOutPath%\Dog
设置输入路径
- set catInPath=Cat\bin\%debugOrRelease%
- set dogInPath=Dog\bin\%debugOrRelease%
打印输出路径
- echo 输出路径
- echo.%driverOutPath%
- echo.%catPath%
- echo.%dogPath%
编译
如果有多解决方案(sln)可以中间加pause,防止编译出错的信息忽略掉。
- @PAUSE
- echo 开始编译
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。
- %windir%\microsoft.net\framework\v4.0.30319\msbuild Circus.sln /p:Configuration=%debugOrRelease% /t:Rebuild
创建驱动目录
- @PAUSE
- echo 开始复制
- if not exist %catPath% md %catPath%
- if not exist %dogPath% md %catPath%
复制驱动
其中用到两种方式,一种是单个文件复制,一种是文件夹复制
echo 复制Circus
xcopy %CircusInPath% %baseOutPath% /S /Y
echo 复制Cat
copy %catInPath%\Cat.dll %catPath% /Y
echo 复制Dog
xcopy %dogInPath% %dogPath% /S /Y
echo 复制完毕
@PAUSE
结论
上述输出:
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。
从上述输出的结果我们可以看出,我们预期的目的已经完成。这样即简单又自动化,降低人为带来的错误。
Demo下载
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。
用批处理来自动化项目编译及部署(附Demo)的更多相关文章
- 区块链入门(4)Truffle创建项目,编译,及项目部署
上一章的结尾说这一次要讲编写一个智能合约部署到测试网络集群中,并进行交易,但我自己越看越觉得内容挺多的.先讲下truffle的项目创建,编译和部署的问题,然后再做上面说的事情吧. truffle是一套 ...
- Vue路由器的hash和history两种工作模式 && Vue项目编译部署
1 # 一.Vue路由器的两种工作模式 2 # 1.对于一个uri来说,什么是hash值? 井号及其后面的内容就是hash值. 3 # 2.hash值不会包括含在HTTP请求中,即:hash值不会带给 ...
- Windows Phone 8初学者开发—第8部分:理解编译和部署
原文 Windows Phone 8初学者开发—第8部分:理解编译和部署 第8部分:理解编译和部署 原文地址: http://channel9.msdn.com/Series/Windows-Phon ...
- idea使用docker-maven-plugin插件将项目编译为docker镜像到远程linux服务器 原
在使用idea开发时,直接docker-maven-plugin插件,把项目编译成docker镜像,然后通过docker:push推送到linux服务器,非常简单,快捷,也避免了手动打包,然后拷贝wa ...
- Selenium Web 自动化 - 项目实战环境准备
Selenium Web 自动化 - 项目实战环境准备 2016-08-29 目录 1 部署TestNG 1.1 安装TestNG 1.2 添加TestNG类库2 部署Maven 2.1 mav ...
- IDEA多模块父子依赖maven项目war包部署
IDEA多模块父子依赖maven项目war包部署 Posted on 2018-04-25 | In IDEA | | Visitors 286 IDEA全称为IntrlliJ IDEA,它是一款非常 ...
- Azkaban —— 编译及部署
一.Azkaban 源码编译 1.1 下载并解压 Azkaban 在3.0版本之后就不提供对应的安装包,需要自己下载源码进行编译. 下载所需版本的源码,Azkaban的源码托管在GitHub上,地址为 ...
- Azkaban学习之路(二)—— Azkaban 3.x 编译及部署
一.Azkaban 源码编译 1.1 下载并解压 Azkaban 在3.0版本之后就不提供对应的安装包,需要自己下载源码进行编译. 下载所需版本的源码,Azkaban的源码托管在GitHub上,地址为 ...
- 一文搭建自己博客/文档系统:搭建,自动编译和部署,域名,HTTPS,备案等
本文纯原创,搭建后的博客/文档网站可以参考: Java 全栈知识体系.如需转载请说明原处. 第一部分 - 博客/文档系统的搭建 搭建博客有很多选择,平台性的比如: 知名的CSDN, 博客园, 知乎,简 ...
随机推荐
- 阿里前端框架Alice是个不错的选择
BootStrap虽然用户群体广大,其整体风格尽管有不少skin可选,但以国情来看还是不好看. 阿里开源的前端框架,个人觉得还是很不错,Alice处处透着支付宝中界面风格的气息,电商感挺强. 以下内容 ...
- codeforces 700A As Fast As Possible 二分求和?我觉得直接解更好
分析:一辆车最多载k个人,车的速度肯定比人快,所以想要到达时间最短,那么每个人必须做一次公交车.那么把n个人分成p=(n+k-1)/k组.设最短时间为t,每人乘车时间为t1,则t1*v2+(t-t1) ...
- Thinkphp各种方法知识图谱
A方法:用于实例化控制器 ThinkPHP函数详解:A方法 B方法:执行某个行为 I方法(其命名来自于英文Input):获取输入参数 支持过滤和默认值 ThinkPHP函数详解:I方法 D方法:D函数 ...
- nginx的pass_proxy遇到的坑
Pass_proxy走内网,被请求方的php使用remote_addr得到就是转发机器的内网地址,如192.168.10.141这样的.走外网,被请求方php的remote_addr得到就是转发机器的 ...
- [javascript] 对象拷贝
Object.prototype.clone = function() { var copy = (this instanceof Array) ? [] : {}; for (attr in thi ...
- 常见.NET功能代码汇总
1,在Web上修改指定文件位置的Web.config 这里需要使用 WebConfigurationManager 类,但必须使用WebConfigurationFileMap类来指定文件位置,看代码 ...
- [AngularJS] 使用AngularAMD动态加载Controller
[AngularJS] 使用AngularAMD动态加载Controller 前言 使用AngularJS来开发Single Page Application(SPA)的时候,可以选用AngularU ...
- 【position也可以很复杂】当弹出层遇上了鼠标定位(上)
前言 周五时同事有一个关于弹出层的问题没有解决,但是面临下班问题,我有点不舒服,便叫回去周六过来解决,但是上周六病了,所以请了个假,于是故事发生啦.... 今天上班时候,组员们卡到了那个地方,然后结果 ...
- 理解React中es6方法创建组件的this
首发于:https://mingjiezhang.github.io/(转载请说明此出处). 在JavaScript中,this对象是运行时基于函数的执行环境(也就是上下文)绑定的. 从react中的 ...
- 精通 CSS 选择器
CSS 选择器除了样式表匹配元素时需要用到,在使用 jQuery 等库的时候也可以利用 CSS 选择器来选择元素,因此作为前端开发需要熟练掌握.下面是一些常用的 CSS 选择器示例. 元素选择器 E, ...