zoukankan      html  css  js  c++  java
  • 用批处理来自动化项目编译及部署(附Demo)

    阅读目录

    本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。

    介绍

      一个项目从立项开始,可能就已经根据公司的配置模板将目录,文档结构定义出来。有动态库,也有静态库,在没有专门的CMO的时候,往往组长,若干开发人员承担版本发布的工作。次工作即枯燥,又容易出错,那么怎么样才能将这样的工作略微自动化点。以下就通过很简单的很古老的批处理来略微自动化下。

    详细

    一:目录结构

      每个公司的目录结构不一样,当略有相同,比如:管理库,需求库,设计库,代码库,引用库(包库),资源库,编译模板库,编译版本库,发布版本库等。
    如下图:

    二:生成临时版本流程:

    本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。

      一般的比较正规的是:发布人员获取所以同步,然后编译,然后将编译的release下的各个文件夹拷贝出来,做记录,放到临时版本库中。也有筒靴可能会说,自己把项目的编译生成路径改到对应的地方不就OK了,虽然可以,但有时候情况比较特殊,比如都是插件开发,把路径改了,就不好调试了,不可能每个多附加进程调试吧。
      所以我们要解决的是怎么通过批处理来进行自动化编译和将编译完成文件复制到对应目录。

    三:批处理

      后缀为.bat的文件就是批处理文件。以下就对比较长用到的命令做个简单描述:

    echo 和 @回显控制命令
    echo off #从下一行开始关闭回显
    echo on #从下一行开始打开回显

    md创建目录
    md abc #在当前目录里建立子目录 abc
    md d:ac #如果 d:a 不存在,将会自动创建

    本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。

    copy拷贝文件
    copy c: est.txt d:复制 c: est.txt 文件到 d:
    copy c: est.txt d: est.bak复制 c: est.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=..09.临时版本Circus\%debugOrRelease%
    set driverOutPath=%baseOutPath%Config
    set catPath=%driverOutPath%Cat
    set dogPath=%driverOutPath%Dog

    设置输入路径

    set catInPath=Catin\%debugOrRelease%
    set dogInPath=Dogin\%debugOrRelease%

    打印输出路径

    echo 输出路径
    echo.%driverOutPath%
    echo.%catPath%
    echo.%dogPath%

    编译

    如果有多解决方案(sln)可以中间加pause,防止编译出错的信息忽略掉。

    @PAUSE 
    echo 开始编译

    本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。

    %windir%microsoft.netframeworkv4.0.30319msbuild  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和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。

  • 相关阅读:
    Android开源项目分类汇总
    android开发之Tabhost刷新
    android开发之图表
    通过易宝实现网上支付
    HTTP协议
    汽车美容管理系统质量属性
    框架选择的原因及其说明
    浅析软件架构
    《需求分析与系统设计》读书笔记3
    《需求分析与系统设计》读书笔记2
  • 原文地址:https://www.cnblogs.com/mephisto/p/3764752.html
Copyright © 2011-2022 走看看