CVS+VS2003+SetupFactory建设每日构建(Daily build)

    技术2022-05-11  78

    CVS+VS2003+SetupFactory建设每日构建(Daily build) Daily build创始者据说是 微软 ,但是对于项目管理的确很管用,尤其对大型项目来说更是能提高效率;我是在上一个外企公司接触到Daily build得,由于之前在一家国内小公司做软件开发,什么都不是很规范;当到了外企公司接触到他们对产品管理得流程,不得不留神学着点,关于Daily build一直是在纸上谈兵,从来没有实践过。 前一段时间换了个公司,到国内一个新成立得公司,工作了一段时间后,发现公司根本就不规范,更别说Daily build了,本人抽空和他们聊天(实际上是建议)说我们得规范一点,当产品进入测试期,得做Daily build,他们觉得没有必要,甚至说给QA release产品不用专业打包工具,直接给个压缩包(*.zip,*.rar)就可以了;别人不愿意干了,我自己来,我抽空做了一个Dailybuild。无奈公司犯了国内软件公司得通病,不重视QA,我做出来得Daily build即使一天可以出10个版本,QA不提取,也等于0;现将daily build部分总结,和大家分享。 Daily build职能 实现自动从版本控制器(CVS/VSS)中提取最新代码; 实现自动编译,摆脱编译的手工劳动,提高了效率 大系统编译耗时,利用晚上的时间完成(设置schedule),节省时间和节约资源,并且减少工作成本 在不断地进行构建、测试中,发现错误及时纠正,保证了每日构建的质量 促进软件协作开发的合理策划和分工,提高开发的自觉性和效率,保证进度 围绕每日构建必须制定相应的团队规则,有助于建立高效、优秀的团队 缩短跟踪 bug 周期,提高效率 保证编译版本与源代码的一致,达到软件版本与源代码的真正受控 Daily build需要的资源        版本控制器:CVS ,VSS等(本文以CVS为例)        版本控制器服务器: 这是一个文件服务器,存放源代码,在我们这里是 VSS/CVS 库。开发人员依据一定的团队规则围绕此服务器开展每天的开发工作 ;Daily build 将从这里提取所用的全部源代码;

     

          编译器: VS,C++BUILDER 等等;

     

          打包软件: installsheild setupfactory installanywhere 等等

     

           构建服务器( Build Server ):这是 Daily Build 主机,实现软件产品的自动提取,自动编译、构造过程。这个服务器上需要安装编译器,版本控制器客户端,打包软件;

     

          发布服务器( Release Server ):存放软件产品的每次构建版本,测试人员由此提取最新版本进行测试,配置人员再从中提取经过测试的 RC 版本准备发行。此服务器一般和构建服务器为同一服务器; Daily build 实现步骤 从版本控制器服务器(CVS Server)中提取最新源代码 生成项目需要的标识或发布信息(如版本好,构建目录等) 在构建服务器(Build Server)上编译、构建,并且制作安装包 将安装包发送到发布服务器(Release Server)上 以上主要介绍了一下Dailybuild的基本只是,下面我们通过实例来实现整个过程, (CVS+VS2003+SetupFactory),关于服务器的建立设置就不说了; 从版本控制器服务器(CVS Server)中提取最新源代码 创建一个临时目录,用来存放从服务器上获取的源码

     

    #del the old path rmdir TempBuild /s /q md TempBuild cd TempBuild cvs 客户端安装后并不会自动设置PATH,需要手动,设置CVS path

     

    set CVS_PATH=D:/Program Files/TortoiseCVS set path=%path%;%CVS_PATH% 设置cvs环境变量

     

    set CVSROOT=:pserver:lanhuaiyu@192.168.1.81:2401/cvsroot/httpserver 登录CVS

     

    cvs -q login -p lanhuaiyu 列出CVS所有模块

     

    cvs -q ls 从CVS获取模块1

     

    cvs -q checkout Module1 cvs -q checkout Module2 cvs -q checkout Module3 退出登录

     

    cvs logout  

     

    生成项目需要的标识或发布信息(如版本好,构建目录等) 生成Setupfactory 所需要的全局变量文件,Setupfactory根据这些变量来打包产品;由于这部分用脚本在Windows下实现起来比较麻烦,在此用C++来实现,编译成一个EXE,有脚本来调用; #include "stdafx.h"

     

    #include "fileopt.h"

     

    #include

     

    #include

     

    #include

     

    #include

     

    #include

     

    #include

     

    using namespace std;

     

     

     

    const char* DEFAULT_BUILDDIR = "C://XXX_Release";

     

    const char* DEFAULT_SRCDIR = "../build/release";

     

    const char* PRODUCT_NAME = "XXX";

     

    const char* MAIN_VER = "1.0(Alpha)";

     

    const int MAX_PATH = 160;

     

     

     

    int _tmain(int argc, _TCHAR* argv[])

     

    {

     

         struct tm *local;

     

         time_t t;

     

         t = time( NULL );

     

         local = localtime(&t);     // get local time

     

         int nRt = 0;

     

         string sSrcPath = DEFAULT_SRCDIR;

     

         string sBuildPath = DEFAULT_BUILDDIR;

     

         cout<<argv[0]<<endl;

     

        if (argc > 1)    

     

         {

     

              sSrcPath = argv[1];

     

              cout<<argv[1]<<endl;

     

         }

     

        if (argc > 2)    

     

         {

     

              sBuildPath = argv[2];

     

              cout<<argv[2]<<endl;

     

         }

     

     

     

         char pzVersion[50];

     

         string sFileName;

     

         char pzSetupName[MAX_PATH];

     

         for (int i = 1; i <= 15; i ++)

     

         {

     

              //setup file name info

     

              sprintf(pzSetupName, "%s_%d%1Xd%X.exe", PRODUCT_NAME,

     

                  local->tm_year - 100, local->tm_mon+1, local->tm_mday, i);

     

              sFileName = DEFAULT_BUILDDIR;

     

              sFileName.append("/");

     

              sFileName.append(pzSetupName);

     

              YLTT_COMM::CFileCmd::FormatPath(sFileName);

     

            

     

             if (!YLTT_COMM::CFileCmd::IsExisted(sFileName.c_str()))

     

             {

     

                  //version info

     

                  sprintf(pzVersion, "%s.%d%1Xd%X", MAIN_VER,

     

                       local->tm_year - 100, local->tm_mon+1, local->tm_mday, i);

     

                  break;

     

             }

     

             else

     

             {

     

                   cout<<pzSetupName<<" Exist!"<<endl;

     

             }

     

         }

     

     

     

         //create build info

     

         ofstream fsBuild;

     

         fsBuild.open("build.ini", ios_base::out | ios_base::trunc);

     

         fsBuild<<"[Constants]"<<endl;

     

         fsBuild<<"#PRODUCT_NAME#=产品名称"<<endl;

     

         fsBuild<<"#OUTPUTDIR#="<<DEFAULT_BUILDDIR<<endl;

     

         fsBuild<<"#SETUPNAME#="<<pzSetupName<<endl;

     

         fsBuild<<"#PRODUCT_VER#="<<pzVersion<<endl;

     

         fsBuild<<"#SRC_PATH#="<<sSrcPath<<endl;

     

         fsBuild.close();

     

         ofstream fsCopy;

     

         fsCopy.open("copy.bat", ios_base::out | ios_base::trunc);

     

         fsCopy<<"copy "<<DEFAULT_BUILDDIR<<"//"<<pzSetupName<<" "<<sBuildPath<<"//"<<endl;

     

         fsCopy.close();

     

         return 0;

     

    }

     

    以上代码主要实现一下功能:

     

    1.   根据当前日期和临时发布目录的文件确定目前需要产生的新版本的版本号;

     

    2.   生成Setupfactory 所需要的全局变量文件;

     

    3.   生成一个COPY.bat文件,调用此脚本将生成的新版本COPY到发布服务器上;

     

     

     

    自动编译获取的源代码 #setpath 设置SetFactory PATH set SF7_PATH=D:/Program Files/Setup Factory 7.0 设置编译器PATH set VC7_PATH=D:/Program Files/Microsoft Visual Studio .NET 2003/Common7/IDE set AB_PATH=F:/CVSRoot/ECast/autobuild set path=%path%;%SF7_PATH%;%VC7_PATH% 编译解决方案(或项目) #compile devenv TempBuild/solution1/solution1.sln /build release /out release.log  

     

    自动制作安装包 生成项目需要的标识或发布信息

     

    PreInstall.exe "TempBuild/build/release" "//192.168.1.83/ftps/Work_Dir/xxx_release"  

     

    调用Setupfactory制作安装包,其中参数build.ini为全局变量文件,关于如何建立Setupfactory工程请参阅其帮助;

     

    SUF70Design.exe /BUILD "ECast_inst.sf7" "/CONST:
    转载请注明原文地址: https://ibbs.8miu.com/read-18471.html

    最新回复(0)