UML软件工程组织

 

 

配置管理每日构建(三)
 
2008-03-14 来源:Blog.ChinaUnix.net
 

3.自动编译系统的配置

3.1. 目录结构
   
工程源代码目录(NBDSOURCE):在该目录下 Checkout 工程的源代码。它是整个工程的核心。 
工程源代码配置目录(NBDSRCCTL):在源代码目录下,创建一个存放控制文件的目录,如 config,或者 admin。主要是放入存储编译日期、版本的文件
Nightly Build编译脚本目录 (NBDSCRIPT):在该目录 Checkout 执行自动编译的脚本。它是整个编译系统的工具箱。  
Nightly Build启动目录 (NBDHOMEDIR):同样的编译脚本,要能够编译一个工程的不同的分支,也要能够编译如前所述的 nightly, milestone, sticky 版本。这就需要建立发起编译的目录,该目录主要放置一些能够区分不同编译条件的配置文件,以及启动编译脚本的钩子脚本。
   
    3.2. 配置文件
    3.2.1. NBDHOMEDIR/build.ini
    用于指定源代码、脚本的路径。
    #脚本的根路径     源代码的根路径
    NBDSCRIPT=/home/Administrator/work/jiangxin/src/nightlybuild/script/ 
    NBDSOURCE=/home/Administrator/work/jiangxin/src/dlltest/ 

 3.2.2. NBDHOMEDIR/LABEL
    决定编译的版本:nightly, milestone, 还是 sticky 版本。
    空文件,或者内容为 nightly 的文件,意味着编译 nightly 版本。
    内容为 milestone,意味着编译 milestone 版本。
    内容为某一真实存在的标签 LABEL/TAG,意味着编译该版本的 sticky 编译。
   
    3.2.3. NBDHOMEDIR/BRANCH
    如果是空文件,或者内容为 main,意味着当前代码处于主线。
    如果是其它内容,则该内容为分支 LABEL/TAG。
    这个文件是和 CVS 的 MAGIC BRANCH 的概念向对应的,参见:《Per Cederqvist's CVS Manual》
   
    3.2.4. NBDHOMEDIR/nightly.sh
    调用真正的脚本的钩子脚本。
   
    #!/bin/sh
    #set -x
   
    NBDHOMEDIR=`dirname `
   
    if echo "$NBDHOMEDIR" | grep -q -v  "^/"; then
     NBDHOMEDIR="`pwd`/$"
    fi
   
    NBDHOMEDIR=$
    NBDHOMEDIR=$
    export NBDHOMEDIR
   
    build_file_name="$/build.ini"
   
    if [ ! -f "$build_file_name" ]; then
     echo "not find $build_file_name!" && exit 1
    fi
   
    . $build_file_name
   
    cd $NBDSCRIPT
    sh nightlybuild.sh "$@"
   
    3.2.5. NBDSRCCTL/VERSION
    记录版本号、编译日期
   
    [myapp]
    module=RegDllTest otherapp
    version=1.3.5.10
    buildtime=2003-04-01 20:44:48
    revisonfile=RegDllTest/RegDllTest.rc

    [mydll]
    module=DisplayAppName
    version=2.1.3.19
    buildtime=2003-02-12 10:21:08
    revisonfile=DisplayAppName/DisplayAppName.rc
   
    [global]
    version=1.0.0.1
    buildtime=2003-04-01 20:44:48
     
    表示一个单元的开始
    模块列表,需要检查代码更新的模块列表
    定义该单元模块的版本号
    上一次该模块编译的时间
    包含版本信息的资源文件,用本节定义的版本号去更新资源文件
    全局配置开始
    整个软件包的版本号

3.2.6. NBDSRCCTL/PROMOTION
    记录里程碑版本号。例如:
    JOHNSON-V-1-0-1

A. Nightly Build命令行
Synopsis: nightly.sh [options...] [command...]
    Options :
        -release (-r)
            build RELEASE version (default)
        -engineer (-e)
            build engineer version
        -force (-f) 
            force build.

    Command:
        nightly (n)
            All commands are bind to one. there are three steps to run nightly.
            update, compile, link, post
        update (up)
            1st step of running nightly.
            update_source_code         : step 1.1
            update_version_file        : step 1.2
            update_rc_file             : step 1.3
        compile (c)
            2nd step of running nightly.
            run custom make.bat        : step 2.1
        link (l)
            3rd step of running nightly.
            run custom link.bat        : step 3.1
        post (l)
            4th step of running nightly.
            cp package to ftp_dir      : step 4.1

          checkin version file       : step 4.2
    Other Command:
        help 
            This screen.
        config
            Additional help.

        run nightly.sh config to see additional help.

B. 编程工具的命令行支持

B.1. Unix/Linux

 使用autoconf/automake/autoheader工具
    用autoconf/automake/autoheader工具来处理各种移植性的问题,用这些工具完成系统配置信息的收集,制作makefile文件。然后在打算编译源码时只需要通过 “configure; make”这样简单的命令就可以得到干净利落的编译。
    GNU Makefile 参见 GNU Makefile和configure
    BSD Makefile 参见 FreeBSD Porter's Handbook

B.2. Visual C++
    msdev 提供命令行编译支持,可以直接使用 .dsw, .dsp 文件执行命令行编译。
   
    Usage:
      MSDEV [myprj.dsp|mywksp.dsw]  - load project/workspace
            []            - load source file
            /?                      - display usage information
            /EX          - execute a VBScript macro
            /OUT          - redirect command line output to a file
            /USEENV                 - ignore tools.options.directories settings
            /MAKE [] [...]  - build specified target(s)
                  [ - ]
                  [[|ALL] - [DEBUG|RELEASE|ALL]]
                  /CLEAN            - delete intermediate files but don't build
                  /REBUILD          - clean and build
                  /NORECURSE        - don't build dependent projects

    例如:MSDEV myprj.dsp /MAKE "ALL - Win32 Release" /REBUILD

B.3. C++ Builder
    C++ Builder 的工程文件 .bpr 文件是 XML 格式的文件,不能直接提供给命令行进行编译,需要转换为 .mak 格式的Makefile。 
    将 .bpr 文件转换为 .mak 文件:BPR2MAK -omyprj.mak myprj.bpr
    执行命令行编译:MAKE -B -fmyprj.mak

B.4. Visual Basic
    vb6[.exe] [[{/run | /r} projectname] [[{/d compileconst}] {/make | /m } projectname] [{/makedll | /l} projectname] {/cmd argument | /c argument}][ projectname][ or projectname /out filename}][][/sdi] or [/mdi]

B.5. Install Shield
    命令行工具 Compile.exe 和 ISbuild.exe 可以完成命令行方式的打包。
    Compile script_file [ifx_obl_file] [isrt_obl_file] [ifxobject_obl_file] switches
ISBuild [switches]

B.6. INNO Setup
    命令行工具 iscc.exe 可以完成命令行方式的打包。
    iscc "c:isetupsamplesmy script.iss"

C. 时钟同步

在实践中,会发现编译机和版本控制服务器的时钟同步非常重要。因为编译机确定编译的时间,是从本地取时钟,编译成功后,要将编译时间 checkin 到版本控制服务器,以便下次执行自动编译时,从该文件获取上次编译时间,比较两个时间间隔内有否代码改动。如果发布机的时钟和版本控制系统的时钟不一致,会导致代码更新的误判。
   
    最近在网上发现了一篇文章,《A Beginner's Guide to Network Time Protocol--Other Time Software》,非常巧合的是,我在选择时间同步方案的时候,走了几乎相同的路。
   
    对于工作组内平台相对单一,时钟同步是一件非常简单的事情:
   
    加入 Windows 域的 Windows 平台的机器会定期和域控制服务器时钟同步。亦可以使用命令"net time /setsntp" 和 ntp 服务器时钟同步。
   
    对于Unix服务器来说,则有更多选择的余地。例如:从最简单的使用13端口的 RFC867 daytime 协议;使用基于 RFC868 Time Protocol 的 rdate 命令从服务器读取时间来设置本地时间;运行 timed,保持 unix 机器自动同步时钟;以及用 ntp 协议和国际标准时同步。
   
    对于复杂的网络环境,使用 ntp 确是上选。
   
    Servers that provide synchronization to a sizeable population of clients normally operate as a group of three or more mutually redundant servers, each operating with three or more stratum-one or stratum-two servers in client-server modes, as well as all other members of the group in symmetric modes. This provides protection against malfunctions in which one or more servers fail to operate or provide incorrect time. The NTP algorithms have been specifically engineered to resist attacks where some fraction of the configured synchronization sources accidently or purposely provide incorrect time. In these cases a special voting procedure is used to identify spurious sources and discard their data.
   
    参见:《A Beginner's Guide to Network Time Protocol (NTP)》, 《Notes on setting up a NTP subnet》...

选择几个内部的 Unix 服务器非别和一组 Internet 上的 NTP 服务器保持时钟同步;
   
    前面配置的服务器作为工作组内其它服务器的 NTP 服务器;
   
    非别在 Unix 和 Windows 平台安装客户端软件,和工作组内的 NTP 服务器同步。
   
    Unix上的 NTP软件:
   
    下载...
   
    Windows上的 NTP客户端的配置:
   
    安装软件:automachron;
   
    运行 achron.exe /s 运行 automachron;
   
    使用工具Microsoft Windows NT Resource Kit: instsrv.exe, srvany.exe 将 automachron 加入系统服务中,自动运行;
   
    参见:让程序作为服务运行。
   
    查看 automachron 的运行日志,确定 automachron 正确执行。

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号