|
本帖最后由 技术狂人 于 2011-10-2 23:56 编辑 7 i% r4 z+ y; F
3 d% a* x% o. }
Rational Build Forge 简介
7 j. i6 b" {$ ~1 p3 z6 T W OIBM Rational Build Forge 是一个构建和发布自动化管理系统,它可以自动控制,追踪,分析复杂的构建和发布过程。它支持所有主要的开发语言,脚本和工具,而无论它们处在哪一个开发平台,它把许多软件开发程序集成在一起以便集中构建,能在多项目、多团队之间对发布进行管理,并且已有的脚本和正在使用的开发工具可以很好地与 Build Forge 兼容。Build Forge 中项目可以建立许多执行步骤,每个步骤中可以选择自己的脚本以及执行的环境,这些执行步骤可以依次或同步执行,这都易于构建复杂的项目。4 Z# g0 G! m- A8 p9 @8 l% k8 @
5 r; B* a9 N" c8 u2 U+ c P* `( p# M: s; Z5 N/ B
# M2 W( a$ e. V( SRational Team Concert 简介( D6 W4 O E8 |
Rational Team Concert 是一个可实时相互协作的软件交付环境,集成了工作项管理,代码管理,持续构建,迭代设计等功能。能够使开发者,架构师,项目经理等工作更具效率。
$ e- |' @# s! ^9 t. O, Q $ g* P3 ? d6 C( B. e
* z% ~' s: j. F; l% e
( o) \' w) ?1 I0 Y7 g' s& N9 HRational Team Concert 与 Rational BuildForge 集成概述1 j& \" a1 F$ d6 O/ {* q: B% F
Build Forge 中的项目可以有基于相同或不同代理端的许多步骤,这些步骤可以同步或异步的执行。Build Forge 的收集器可以给每个代理端设置属性,选择器可以根据代理端名称或属性选择代理端,并且 Build Forge 可以对每个代理端进行监控,会选择最优的代理端来执行每个步骤中的命令,这种机制提高了代理端的使用效率。RTC 和 Build Forge 集成可以在 RTC 中直接调用 Build Forge 进行代码构建,发挥了 Build Forge 构建和发布的自动化能力。用户可以在 RTC 中看到构建的过程,结果以及构建日志。同时,构建结果和构建的代码都在 RTC 下,为用户提供了很大的方便,特别是对于每天需要在 RTC 下进行工作的开发者而言。本文重点讲述如何集成 Build Forge 和 RTC3,在本文的最后部分会对 Build Forge 和 RTC2 集成进行简要说明。在本系列二的文章中,我们会讲述 RTC3 如何与 Jazz Build Engine, Build Agent 集成进行构建,也会对 RTC3 的代码管理和代理端的故障转移和冗余备份等特性进行说明。+ N5 h( r) T' t9 ]3 \& ?$ q% b
7 G; b r% A7 g* R, ]' {+ U3 \+ p: ^
3 D0 o! [8 M: b
$ H5 v7 g) T, q. z6 U
RTC3 的优点+ x. ]* m% O5 D# Q3 _" `( R
RTC 目前常用的有两个版本:RTC2 和 RTC3。下面列出两者相比 RTC3 的改进之处:- C: F/ M1 H7 h. ?
- 安装方面的改进。RTC2 与 Build Forge 集成时,RTC2 服务端须从 Build Forge 服务端下载 BuildForgeConnectorServer.zip 并安装,RTC2 客户端须安装 Build Forge Eclipse 插件。RTC2 服务端插件主要作用是从 RTC 容器和 Build Forge 容器中监听事件,客户端插件的主要作用是为了生成 Build Forge 构建定义的用户界面。RTC3 已经将这些插件集成进去,所以不需要在服务器端和客户端下载并安装插件。RTC3 中的插件适用于 Build Forge 7.1.1.3 和其以后的版本。
- RTC3 在服务端不需要为 Build Forge 插件配置用户。而 RTC2 服务端会配置一个用户来监听 Build Forge 事件,并给这个用户赋予构建所需的权限,特别是默认的 ADMIN 用户在安装过程中被禁用后,需要在服务端创建一个新的用户来处理 Build Forge 插件中的事件。
- RTC3 对如何处理 Build Forge 环境变量与 RTC 属性变量有了改进。为了提高集成度,对每个构建请求,一些重要的 RTC 属性变量会自动的加载到 Build Forge 环境变量中。当在 Build Forge 的适配器或步骤中调用 Jazz Build Engine 或者 Ant 任务时,相关的参数可以从属性变量中直接读取。RTC3 中有些属性变量可以自动的传递给 Build Forge 环境变量,例如:buildResultUUID,engineUUID,buildRequesterUserId。
- RTC3 对构建引擎的改进。在 RTC2 中,对所有 RTC 实例来说只有一个叫做“RationalBuildForgeConnector”的引擎,这个引擎被 Build Forge 插件在构建定义时选定。Build Forge 服务层连接信息位于构建定义页面。所以我们不得不每次在构建定义中配置连接信息。RTC3 中改变了构建引擎的内容,构建引擎和构建定义松耦合,关于连接 Build Forge 的信息都被移到构建引擎的配置上。这样如果只用一个 Build Forge 控制台和一个 Build Forge 用户,我们只需要配置一个构建引擎。当创建新的构建定义时,只需选择配置的构建引擎。
- RTC3 对代码控制集成的改进。Jazz Source Control 可以在构建定义时被选择,选择这部分功能可以减少在 Build Forge 上的手动配置。如果我们在 RTC 构建定义时选择 Jazz Source Control,就可以在 Build Forge 上运行 JazzJBE 适配器来执行代码的接受和取得操作。& d# Y# L) v; ]$ ~/ H5 ~6 N
$ i8 ?2 [1 {% X4 }$ t- [. E, ^5 N# ` X
0 x' L' Q O; ?! t, S集成实例6 K7 X% T s7 h3 b
准备环境2 S2 q, f4 b/ f/ x' L7 U3 W9 t& `. z
Windows 服务器:RTC 3.0.1 服务器,Build Forge 7.1.2 服务器,Build Forge Agent,Buildtoolkit。
+ X4 D0 C/ y4 A2 [+ qWindows 客户端:RTC 3.0.1 客户端。- T1 b6 T4 I) `7 r8 D1 Y1 s
环境拓扑图如下:# j# h# c+ H |9 B
4 Y& A. u0 R0 g) T( C) u. Q ]6 m
图 1. 环境拓扑图
5 p) I4 ?1 b; y/ V& {
% ~! F) E# s0 o8 F8 S; q, o: l- Y# }1 ^5 D6 _& h/ |6 O& N
图 1 说明:RTC3.0.1 Server, Build Forge Server 和 Build Forge Agent 安装在同一台机器上。RTC3.0 客户端安装在另一台机器上。两台机子的操作系统都是 Windows XP。
( E% J6 ~6 ^, N1 T
7 O! j9 k" C8 F+ D e9 I- U- b* A$ p5 E; L& \5 [; w; g
" h2 n$ }% c u一、创建一个简单的 Build Forge 项目' h( b& u0 ?6 `9 l3 Z6 N
Build Forge 安装后,可以用 root 用户登录。用户登录后可以创建自己的用户,图 3 显示的是创建新用户的界面9 p& H8 k; L4 o8 d/ @
* l1 [( C$ U1 u- v' ^: W7 b9 k
图 2. 创建用户界面
' t |( G# @1 A1 s, {# Z - V. X+ l, a8 i$ E8 b
+ W& X) K* O3 l; I6 {: R$ X用创建的新用户重新登录后,进行 Build Forge 代理服务器的配置。首先为代理服务器配置默认的验证方式,收集器和选择器。
* M5 @7 K1 {, N B3 n7 D4 S
! v g+ l9 C$ K5 P8 l8 w图 3. 代理服务器验证; f4 s( k7 o4 Z/ K
6 \6 R. V9 n' B) Q9 C0 C
, H# H \. s" {9 D( z2 W: y1 w收集器的作用是给代理端设置一些筛选的条件,如代理端得内存大小,Java 虚拟机的版本号等。我们设置的收集器为 Collecor1,其中添加变量 JVM_VER,这个收集器的作用是收集代理端得 JVM 版本号。; v2 R* _% E0 B; S. Y$ A
* R$ c* _. i' D+ q
图 4. 收集器的设置( n6 y% _) `% L* M, u- i- ~
7 s0 z8 e$ j9 `* n5 v$ l
1 \) f8 l9 r% d" k; S/ B下面是代理端的设置,我们指定了前面设置的验证方式和选择器。代理端的设置如下:0 Z. {: p3 Z, X2 A; V( \" i
4 x' ~+ V% X& ]& O. w
图 5. 代理服务器设置$ a2 E+ K, y/ e
$ ?" B( k( n; S8 q0 t" O0 R
6 h1 J& m3 V, l a
选择器中设置选择代理端的条件,可以设置选择条件也可以直接指定需要选择的服务器名称。本例设置了选择条件 JVM_VER 等于 1.6.0,如下图:
$ i" y( G( z+ c8 L1 p7 C: V( K: y$ T' B5 @4 x
图 6. 选择器设置" P# L& P C) m2 d/ t
m+ h: D( Y, Z; F7 K
/ p9 q$ }* {1 R' w5 `环境变量中设置的变量可以在项目中直接调用。在 Build Forge 端设置变量,可以直接在执行的代码中读取变量值,所以当变量的值需要改变时,只需在 Build Forge 端修改,而且如果某些变量在不同项目中的值不同的话,只需设置不同的环境变量,相对应的代码也不需修改,增强了 Build Forge 项目中命令执行的灵活性。创建环境和设置环境变量如下:. o, ~$ ~4 {/ v m1 L. z
3 Q+ G: \4 w- q3 s图 7. 环境变量设置
* E J, p* A) m+ g1 A 9 j0 C* M7 v. C4 h2 p
2 o9 Z9 u4 l. O- ~最后我们创建一个项目 RTC3Project,调用前面配置。选择器选择前面创建的 seletor1, 环境变量选择前面创建的 env2。
, s. f% l( l7 A6 z/ p. e! R/ T) `* T2 _; U
图 8. 项目创建
3 n: o& w, x$ \
7 t- K6 \1 a9 k: `) q$ k
$ O. E0 b! G; E1 M. @+ c & S9 { f7 C, k/ Y8 b! T
5 z, J8 W: k) W& ?5 ~# @; u& S9 V2 {
- H/ L. {/ H' H* L! |; ]' a; C
二、在 RTC 服务端创建项目
, F; K, [7 p- ?3 [RTC 中的项目创建有两种方式,分别是服务端项目创建和客户端项目创建。本文以在服务端创建项目为例。当我们安装好 RTC Sever 后,我们在游览器中输入以下地址:https://RTC-server-Path:9443/jts,就会跳到管理员界面。如果我们在安装服务端的过程中创建了新的管理员,并将系统默认的管理员用户 ADMIN 禁用的话,就输入自己设置的用户名和密码。在安装过程中系统会推荐禁用默认用户 ADMIN,所以我们在安装过程中禁用了 ADMIN,创建了一个新的系统管理员 shyangj。登录 RTC 服务端后,我们可以看到服务端管理,用户管理,项目以及各种应用管理的模块。在服务端管理界面,我们会用到证书管理功能,我们下载 RTC-Developer-10-C-License-3.0.1.zip 后,需要在证书管理界面进行导入,然后我们会有 10 个免费开发者的 RTC license。用户管理功能可以使我们创建新用户,修改已有用户信息,禁用某些用户。在应用管理界面,我们可以创建和管理一般的开发项目,质量管理的项目,需求管理的项目。
3 l/ T$ ]1 K7 B$ y0 I我们在首页中可以看到改变和配置管理列表(ccm),我们点击应用管理,会进入应用管理界面。) N' a: N7 n8 I: D4 r) z
然后创建项目 RTCProject, 我们在创建项目时必须要输入项目名称和开发模式。! a0 E2 [7 g% k6 F. A
8 I0 d7 O3 W* [8 _( G# D! R I图 9. RTC 服务端创建项目
1 c% _5 S- s' d& T * `$ z6 H2 `& T: }3 F* W
: y6 |. R* Y3 z6 [+ g) ?; Z
项目创建完成后,可以查看项目的成员,管理员,描述等信息。如下图所示:
9 U5 i- y! `/ o7 W+ u {+ W! u/ m3 N3 \
图 10. 项目信息
7 n A! R2 n& b 5 V; n7 o. u: u+ U1 ?
5 U# p3 T' a, S# e* T7 @$ Q
3 y1 P$ f$ U3 d; Z0 ]6 K/ S" J# [4 t
# n" r1 ~% x3 F/ H
$ w) `/ @4 H6 N$ L& J5 @3 y/ J
三、配置 RTC 客户端集成 Build Forge
- ?& E7 V- {# B/ ^RTC 构建引擎有三种 Jazz Build Engine, Build Agent, Build Forge。这里主要说明 Build Forge 引擎。RTC 与 Build Forge 有两种不同的集成方式。第一种方式是与 Build Forge 集成,我们可以在 RTC 中启动 Build Forge 的项目,在 RTC 中看 Build 的过程及结果。第二种是直接与 Build Forge 的代理端集成,我们可以在 RTC 中指定代理服务器,在代理服务器上运行的提交的构建命令。对于与第二种 Build Agent 的集成,我们在系列二中有具体的介绍。
' r/ ~4 w Q$ x下面讲述 RTC 与 Build Forge 的集成。打开 RTC 客户端后,我们需要连接 RTC 服务端。
1 _9 r" p j2 w; ^. P8 p
* _# o% `3 k) t. G图 11. 服务端的连接
4 {$ p0 p" y5 B3 t/ F+ F5 j C3 T* A4 ^' D- W g& P
" J \2 g. `5 v7 _( j, R6 ]连接 RTC 服务端后,选择已在服务端创建的项目 RTCProject。然后在项目名称 RTCProject 上右键选择 open,我们就可以查看并修改项目的名称,描述,成员等信息。
, G* t+ u* b9 F& A+ \. i) t3 y因为我们所用的用户需要构建权限,所用这里需要修改的用户权限配置。如下图所示,我们在 process Configuration 标签中配置项目组成员权限。
- |7 o6 L% d( ^3 m' K: f0 r% n1 l, o- q2 S- ?
图 12. 用户权限设置
t+ A8 X2 K5 _0 U9 y) L& S
# C6 w4 V9 V% m8 F% Z6 T+ T
0 {4 S& C* e! D6 D0 j9 S接着我们为项目 RTCProject 创建构建引擎。我们右键单击”Build Engines”,选择“New Build Engines”,我们选择第一个按钮创建一个新的构建引擎。如果我们以前创建过引擎,我们也可以选择第二项,直接基于存在的引擎创建一个新的引擎。这节省了创建的时间。我们选择了第一项,所以需要输入构建引擎的名称和类型。这里选择构建引擎的类型为:Rational Build Forge,输入的构建引擎 ID 为:Build Forge Engine。然后单击完成按钮。结束构建引擎的创建。: o) [1 M/ U/ o* O) Y3 ~, X
" j0 D2 s* b; c" |) a! V& n
图 13. 创建新的构建引擎
; g) I- p2 v! b2 ^ & |% j' x& i4 S8 y4 p
2 x9 Z( K+ k2 Z1 C0 F( x
当构建引擎创建完成后,会显示构建引擎的信息。我们在下面选择按钮“Build Forge”,对引擎进行配置。
: b8 n. g3 C. \/ I; X) I; I' D. h+ T$ D: [6 N
图 14. 构建引擎配置: Y' m# _! L' r
; x& z7 T7 A( r2 X
2 [3 W3 C$ A4 P
当构建引擎创建成功后,我们需要创建一个构建定义并使用前面创建的引擎。构建定义的创建方法是在项目结构目录下右键单击“Builds”,然后选择“New Build Definition”,会显示如下图页面:
7 e8 [# j$ |' j& c; Q; v" r
4 g/ k2 v8 [+ r' x2 T- k0 k图 15. 构建定义6 a: H( m7 P' A& l& _, l% B! U4 ?
7 V6 s% x* ^* m7 b) K3 D+ r$ O. |
( l [' m6 i7 b) Z* B2 M9 E如果我们在上面页面中选择创建新的构建定义,会显示构建定义的页面,我们需要输入构建定义的名称和构建模板。我们在构建模板中选择 Rational Build Forge。这个模板可以允许我们选择 Build Forge 中的项目。我们输入的构建定义 ID 为 RTCProject build。. v2 X/ G; D* {- p# b: D4 i. p
对于接下来窗口的信息,我们选择默认即可。最后 RTC 客户端会显示如下页面: e4 D. b% A# Q
' A/ O# a( ?. U7 V图 16 构建定义信息8 F0 M" A0 }: y+ h' M. E4 x. C
* @: V) U1 P' w- W$ w7 p+ E5 R- w( [4 z; L Y
上面的页面显示后,首页要配置的是要使用的构建引擎。如果我们没有选择构建引擎,我们将不能在 Build Forge 标签的配置中选择 Build Forge 中的项目。如果前面我们没有创建 Build Forge 的构建引擎,我们也不能在构建定义中创建新的引擎。在上面页面中的“Supporting Build Engines”部分选择按钮“Edit”,然后选择一个或多个构建引擎,这里我们只有一个构建引擎,所以显示如下图:8 K, {' M8 c5 v/ s3 P# u5 t
" a6 t( _% M6 I# t; p1 v图 17. 构建定义信息4 e* f2 D5 s& x2 C+ K
5 q8 |7 d! X0 \7 J
. O' ^5 E$ i5 |# U
当上面的构建引擎选择后,我们选择标签 Build Forge,然后点击按钮“Get Projects”会在页面中显示用户可以访问的 Build Forge 中的项目名称,如果我们选择某个项目名称后,在标签 Properties 中可以自动从 Build Forge 项目中的环境变量得到属性值并显示。
- D. I+ G B* \7 G/ h& B, W1 ~1 R% D+ a我们也可以在标签 Properties 中对变量进行修改。如下图: Q9 [( ~0 A' d/ j1 J) J' S
& B* T) ?3 T6 {
图 18. 构建定义中 Build Forge 的配置
8 d! ?( ]# L4 b+ Z
! R+ s: H1 R4 V; j$ `
9 N. _! J0 ]% C" x! D7 ^图 19. Properties 标签
; l. o- o$ n4 r' m. N0 U" C0 C / l5 D+ e( L: w) S
7 ~7 H, \ V; X- i
当构建定义完成后,我们可以在项目的 Builds 目录下看到 RTCProject build。我们在构建定义:RTCProject build 上单击右键,选择“Request Build”来提交构建请求。在显示出的窗口“Request Build”中,我们在“Build Options”下查看或修改构建引擎,在“Build Properties”下查看或修改构建的属性变量和其对应的值。
7 u8 ]: W8 ~4 |& _) H, ]3 N' C) _) r2 |: M; X3 c
图 20. 请求构建' m5 y, ~& I( b* G% L* c
% e0 J7 @- z. B( Z
" J# s) m, R* A' [1 k5 ~
我们点击上图的 Submit 按钮提交构建请求后,可以看到如下图的构建信息。
. `8 c; b# t, @% \+ N
6 F' U* i) d N/ C) w8 U, s( C图 21. 构建显示信息2 T, r1 l6 ^; D; A* s
5 z9 P- _, R7 \ u. O, W* X
0 a* }+ u3 K6 U; X6 ?我们在上面页面中双击构建的信息,可以看到构建的结果,构建日志的链接等。
% d8 U# c! J1 m- y: `1 }8 e
* ?# c3 W. F; ^图 22. 构建结果信息
' E$ E! s* _' k. ~( @: G + L- P$ W) E9 I1 w; Z8 S ~* @7 A% Z
" ~; ?6 z7 Y+ M: ]
我们登录 Build Forge 后可以看到对应的项目已经运行结束并且成功。这个和 RTC 客户端显示的一致。# Z+ u9 { T% I
- C, w [& _6 N图 23. Build Forge 项目运行信息2 D9 S6 Z1 l6 k8 l# D5 j
+ w1 q* h4 T H7 t" y: j
" M$ e2 \" _% _$ c
! X( ^$ x) j, d. @/ m3 t! s
# x7 h0 B$ w: }( o+ C5 H4 S1 L* b3 M( Q( }! \% v3 U
四、RTC2 与 BuildForge 的集成
) E0 N* K1 C! o上面部分讲述的是 RTC3 与 Build Forge 的集成,下面部分将对 RTC2 与 Build Forge 集成的不同之处给予简要说明。
; O5 i+ r7 t5 S0 J. IRTC2 与 Build Forge 集成时,需要在 RTC 服务端和客户端安装插件。服务端的插件 BuildForgeConnectorServer.zip 需从 Build Forge 的服务端下载。下载地址为:http://<bf_hostname>/rtc2-server。这个插件也可以直接从 Build Forge 服务器上取得,插件在服务器上的路径为 <bf_install_root>/webroot/public/rtc2-server。当这个插件下载完成后,需要在 <bf_install_root>/jazz/server 目录下解压。如下图:- \) m4 f# M% y8 X$ L; Z
7 D* B8 q) j3 E$ w" r( I9 R
图 24. RTC2 服务端插件安装
9 s& R) Z" ?- O, U% I1 P3 c0 S* J
" e$ r: @. j( N% ^1 ERTC2 客户端插件的安装是通过 eclipse 的“软件更新”功能来实现的。在 RTC 客户端,选择”帮助 -> 软件更新“。我们在添加站点中输入 http://<bf_hostname>/rtc2。单击确定后如下图,我们单击安装按钮进行安装。
/ J" f+ K/ X. b* F* B" x7 B: [0 {8 O' D; v) \( D) X1 r- g3 @
图 25. RTC2 客户端插件安装
+ q+ [1 x1 s; ?) R2 r2 g1 V" {
1 r# k; J! l( J8 r% c9 a8 K3 T$ ^+ U
/ K& E9 F/ [8 b! W) G' q6 F在定义 RTC2 的构建请求时,我们需要配置如下信息。我们发现这部分内容已在 RTC3 中的构建引擎中进行配置。
' p8 _* H$ P( V! B9 [, i5 I' ?1 p6 E8 U
: w/ f3 g) b; v图 26. RTC2 构建定义
6 { _2 h1 t- A8 ?* G( _ % h' }5 [* w- v5 g6 Q: ]
9 l0 p4 K2 |1 h
, R) X* d; U, h. w. b$ W( w总结
8 i; Z3 o: C1 G: T$ g通过这个集成的例子,可以看到项目在 Rational Build Forge 上创建完成后,开发者如何在 RTC 中创建并请求构建来在 Build Forge 上运行。当在 RTC 中请求构建时,RTC 中的构建属性会传到 Build Forge 的环境变量中,Build Forge 中的项目会被触发开始执行,接着 Build Forge 找到合适的服务器来执行项目。我们可以在构建的过程中查看其结果和内容。这样的集成发挥了 Build Forge 的自动化能力和 RTC 的对代码,工作项控制等优势,是大型软件构建时的一种解决方案。3 ~3 y( K3 X: G' Y2 [/ H
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|