分享
 
 
 

配置管理每日构建(三)

王朝厨房·作者佚名  2007-01-05
窄屏简体版  字體: |||超大  

摘要:配置管理每日构建(三)

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 正确执行。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有