关于本文
IBM? Rational? Build Forge? 是 IBM 构建和发布管理的旗舰产品。它不仅提供了构建进程自动化的惊人潜力,还为团队实现了测试程序的自动化。
对于大多数开发员来说,Build Forge 的使用仅仅被限制为使用管理操控台,或者图形用户界面(GUI)。许多团队都没有意识到
Build Forge 可以通过客户端连接,并且与基于 IBM? Rational? Jazz? 技术的软件相集成。当团队需要使用
Build Forge 创建,或者将通用构建与测试方案集成起来时,程序编程界面(API),也就是 Build
Forge 客户端,将会发挥自己的作用。客户端向您提供了一种简单但有效的方法,去添加,编辑,以及按照与管理操控台相同的方式与
Build Forge 对象相集成。
本文详细描述了团队是怎样使用客户端以及 Jazz 插件,来充分开发利用 Rational Build Forge
潜力的。
Rational Build Forge 概述
Rational Build Forge 支持高性能构建以及敏捷软件开发。它的适应性能够帮助开发团队标准化一些重复性的任务,管理一致性的规范,以及共享信息。它自动化并促进了软件收集和交付的过程,并且规范了构建管理。
Build Forge 集成到当前的环境之中,并支持主要的开发语言,脚本,工具以及平台。您可以继续使用已存在的投资,同时为进程自动化,加速,注释以及日程安排添加了有价值的功能。
在真实世界的场景中,每个团队都有其自己的进程,该进程通常是手动且必须的工具,例如漏洞追踪以及源代码管理,很少集成起来。对于更稳定和高质量产品的需求越来越大,它需要集成,重复性,以及高度的可靠性。
出于这个目的考虑,团队通常拥有一些定制的脚本,但是事情要比仅仅一个脚本复杂得多,因为通常情况下您需要多个版本,多个平台,以及多个编辑的支持。这就是
Rational Build Forge 自动化软件收集过程的地方,以实现更快的软件开发和交付循环,更高的产品质量,更高的员工效率,以及更短的投入市场时间。
Rational Build Forge 可以帮助您的团队更快和更轻松地达到以下的目标:
1、再使用已存在的脚本和基础以支持自动化
2、自动化,优化,以及标准化复杂的软件交付生命周期
3、集成不同的工具以管理各种项目配置
4、提供构建加速,服务器管理,自动化注释,日程安排,安全性,以及更多
5、使用 Eclipse IDE 插件以进行更好地管理
6、有了 Microsoft Windows 及 UNIX 操作系统的一般性安装经验,可以简化和建设管理
7、将企业环境之中的软件收集过程实现自动化和规范化
8、继续保持有力语言和多平台支持的传统
Rational Build Forge 结构
Build Forge 结构是以一种这样的方式构建的,您可以在管理操控台,或者
Build Forge 客户端上使用几乎所有功能。如图 1 所示,结构提供了一个简单的 访问,实施 (服务器),以及
运行 (代理)机理。
图 1. IBM Rational Build Forge 结构
如图 1 所示,Build Forge 由一个网络界面构件(Apache
网络服务器和 PHP),一个服务器层构件,以及一个引擎构件组成。网络界面,引擎构件,以及 API 程序客户端就是服务器层构件的客户端。
访问
您可以使用安装期间提供的管理操控台或者 Build Forge 客户端来与
Build Forge 相交流。这有助于管理用户和资源,并创建和安排测试项目,生成和分析报告。管理操控台是一种在
Apache http 服务器上运行的基于 http 的网络程序,但是客户端可以从 Java 和 Perl
处获得。
实施(服务器)
结构的核心是 Build Forge 服务器,它由网络界面构件(Apache
网络服务器以及 PHP),一个服务层构件,以及一个引擎构件组成。服务器可以安装到 Microsoft Windows,Linux,IBM?
AIX? 之类的平台之上,而且它可以与多个数据库一起运行,例如 IBM? DB2?,MySQL 以及 Oracle。服务器层促进了与客户端类管理操控台的联系。这有助于实现与已存在
IDEs 及源代码管理(SCM)工具的完美集成。
运行(代理)
Build Forge 在 Build Forge 代理 的帮助下在末端服务器上执行命令。一个代理从
Build Forge 引擎那里获得指令,对测试中的系统运行指定的命令,并将结果返回至引擎。代理可以在一些环境下运行,例如
Windows,Linux,AIX,Solaris,HP-UX,IBM? System z? 系列,IBM?
System i?,Macs 等等。
Build Forge 客户端简介
Rational Build Forge 是结构的工作流程引擎。它是您可以直接使用的产品,以指定包含指定步骤的项目。步骤可以是一个或者多个在测试基础中选择服务器上执行的命令。但是目前,所有这些操作主要都是从
Build Forge 管理操控台上开始的,它将与集成式开发环境(IDE),软件配置管理(SCM),等等的集成的概率降至最低。
但是,您可以使用 Build Forge 客户端来解决这个问题,它可以帮助您提供与其他工具的完美集成。客户端还提供了一个简单有效的方法,去访问任意
Build Forge 对象,并使用操控台执行几乎所有操作。
Build Forge 7.0.1 版本引入了一个在 Apache Tomcat
服务器容器中运行的服务器层。Build Forge API 可以作为 Java 客户端和 Perl 客户端获得,它们都构建在服务器层之上。在
7.0.1 版本之前,只有 API 可以获得(不是 Perl 客户端)。
从 Build Forge 客户端开始
1、从以下位置处下载客户端文件:
http://server_name:server_port/clients/。
2、如有需要,将 Java 或者 Perl 客户端下载到 Services
Layer 部分。
1)为了使用 Java 客户端,您可以下载客户端文件,获得 rbf-services-client.jar
文件,并将其放到 Java 项目的适当构建位置。
注意: 您需要 JDK 1.5 或者更高的版本来使用
Build Forge Java 客户端。
2)为了使用 Perl 客户端,您可以获得 .zip 文件,切换至 rbf-services
目录,并运行如代码清单 1 所示的命令(您需要 Perl 5.8 或者更高的版本来使用它):
3、Build Forge 客户端直接与服务层相交流。在安装期间,Apache
Tomcat 服务器被配置成监听特定的端口。因此,这些端口必须为客户端开放,以和 Build Forge
相交流。默认条件下,端口会被设置成以下内容:
3966 (non-secure) 49150 (secure, SSL-enabled) |
清单 1. 安装 Perl 客户端
perl Makefile.PL make make install |
提示:
有了客户端,您还可以下载客户端引用文件。
在其余的部分中,我们使用 Java 客户端提供范例,但是您还可以为相同的目的而使用
Perl 客户端。
为了从 Build Forge 客户端开始,首先您需要与 Build Forge
Services Layer 联系起来。
4、在如代码清单 2 所示的代码范例之中,只提供 Build Forge
服务器名和端口号(在默认的端口号下,这是可选的)。
清单 2. 连接至 Build Forge
import java.io.IOException;
import com.buildforge.services.client.api.APIClientConnection;
import com.buildforge.services.common.ServiceException;
public class ConnectToBuildForge {
public static void main(String[] args) {
try{
APIClientConnection conn = new
APIClientConnection(<server_name>,<port_number>);
// In case of default port, do not specify any
port number
String login_token = conn.authUser(<username>,<password>);
// Return value is a login token returned by the
services layer
}catch (ServiceException e) {
System.out.println("Service Exception:"
+ e.getMessage());
}catch (IOException e) {
System.out.println("IOException Exception:"
+ e.getMessage());
}
}
} |
5、接下来,提供一个用户名和密码以进行认证。
6、在认证之后,很重要的一点是您要保存 APIClientConnection
对象,以便后续的操作。确定认证的用户拥有适当的权限去处理 Build Forge 对象。为了提供或者确认权限,您可以切换至
User > Access Groups。
注意: 客户端对象和管理操控台对象使用相同的对话;因此,相同的用户不能以两种方式并发认证。
工作范例
在接下来的代码列表之中,我们将会向您演示一些常用的操作,例如 创建,更改,列表,以及
删除。
注意: 我们使用 Build Forge
7.1.1.4 Java 客户端来进行演示
清单 3. 创建一个用户
import java.io.IOException;
import com.buildforge.services.client.api.APIClientConnection;
import com.buildforge.services.client.dbo.User;
import com.buildforge.services.common.ServiceException;
public
class CreateUser {
/**
* Creates a new user
* @param args
*/
public
static
void main(String[] args) {
try{
APIClientConnection conn = new
APIClientConnection(<server_name>,<port_number>);
// In case of default port, do not specify any
port number
conn.authUser(<username>,<password>);
User user = new User(conn);
user.setLogin(<login_name>);
user.setPassword(<password>);
user.setEmail(<email>);
user.setName(<name>);
user = user.create();
user.addAccessGroup(<access_group>);
}catch (ServiceException e) {
System.out.println("Service Exception:"
+ e.getMessage());
}catch (IOException e) {
System.out.println("IOException Exception:"
+ e.getMessage());
}
}
} |
清单 4. 更新一个测试计划
import com.buildforge.services.client.api.APIClientConnection; |-------10--------20--------30--------40--------50--------60--------70--------80--------9| |-------- XML error: The previous line is longer than the max of 90 characters ---------| import com.buildforge.services.client.dbo.Project;
public
class UpdateTestProject {
/**
* Creates a new test project
* @param args
*/
public
static
void main(String[] args) {
try{
APIClientConnection conn = new
APIClientConnection(<server_name>,<port_number>);
// In case of default port, do not specify any
port number
conn.authUser(<username>,<password>);
Project project = new Project(conn);
project.setName(<project_name>);
project.setSelectorUuid(<selector_uuid>);
project.setBuildClassUuid(<buildclass_uuid>);
project.setActive(true);
project.setLevel(<level>);
project = project.update();
}catch (ServiceException e) {
System.out.println("Service Exception:"
+ e.getMessage());
}catch (IOException e) {
System.out.println("IOException Exception:"
+ e.getMessage());
}
}
} |
清单 5. 列表环境值
import java.util.List;
import com.buildforge.services.client.api.APIClientConnection;
import com.buildforge.services.client.dbo.Environment;
import com.buildforge.services.client.dbo.EnvironmentEntry;
public class ListEnvironmentEntries {
/**
* Returns the list of all Environments Entries
in an Environment
* @param args
*/
public static void main(String[] args) {
try{
APIClientConnection conn = new
APIClientConnection(<server_name>,<port_number>);
// In case of default port, do not specify any
port number
conn.authUser(<username>,<password>);
Environment env = Environment.findByUuid(conn,
<env_uuid>);
// Find environment
if(env!=null){ // Find environment entries only
if environment exists
List<EnvironmentEntry> ls = env.getEntries();
// Get environment entries
for(EnvironmentEntry env_entry : ls){
System.out.println("Environment Entry Uuid:"
+ env_entry.getUuid());
System.out.println("Environment Uuid:"
+ env_entry.getEnvironmentUuid());
System.out.println("Environment Entry Parameter
Name:" +
env_entry.getParameterName());
System.out.println("Environment Entry Parameter
Value:" +
env_entry.getParameterValue());
}
}
}catch (ServiceException e) {
System.out.println("Service Exception:"
+ e.getMessage());
}catch (IOException e) {
System.out.println("IOException Exception:"
+ e.getMessage());
}
}
} |
清单 6. 激活项目并搜索结果
import java.util.List;
import com.buildforge.services.client.api.APIClientConnection;
import com.buildforge.services.client.dbo.Build;
import com.buildforge.services.client.dbo.Project;
import com.buildforge.services.client.dbo.Result;
public
class FireProjectAndFindResults {
/**
* Fire project and find corresponding results
* @param args
*/
public
static
void main(String[] args) {
try{
APIClientConnection conn = new
APIClientConnection(<server_name>,<port_number>);
// In case of default port, do not specify any
port number
conn.authUser(<username>,<password>);
Project project = Project.findByUuid(conn,<project_uuid>);
if(project!=null){ // Fire project if only it
exists
Build build = project.fire();
// Sleep for some seconds
List<Result> ls = build.getResults();
Result result = null;
for(Result result : ls){
System.out.println("Build Uuid:" + result.getBuildUuid());
System.out.println("Result Step Description"
+ result.getDescription());
System.out.println("Result Step Duration"
+ result.getDuration());
System.out.println("Result" + result.getResult().name());
}
}
}catch (ServiceException e) {
System.out.println("Service Exception:"
+ e.getMessage());
}catch (IOException e) {
System.out.println("IOException Exception:"
+ e.getMessage());
}
}
} |
这些范例使用 Java 客户端来显示对 Build Forge 对象的一些操作。您可以看到它可以帮助您研究更多此类的操作,并使用它们达到最大的潜力。查看
Java 和 Perl 客户端所提供的帮助。
与 Jazz 产品相联系以得到完整系列的工具
在前面的章节中,您要同时使用 Java 和 Perl 客户端以与 Build
Forge 相联系。但是 Rational Build Forge 还提供了与一些有用的软件基于 Jazz
基础的紧密集成,例如 IBM Rational Quality Manager 和 IBM Rational
Team Concert。
1)Rational Quality Manager 是测试活动的中心。它可以帮助您规划测试,管理需求,开发测试用例和测试套装,维护测试执行记录,管理实验资源,以及提交和追踪缺陷。
2)Rational Team Concert 可以帮助您管理源代码,以及追踪缺陷,工作项,以及迭代计划。这可以帮助测试员,开发员,结构师和管理员一起更加有效地协同工作。
因此,Rational Quality Manager 与 IBM Rational
Team Concert 和 Rational Build Forge 的集成可以帮助团队为变更和发布管理提供完整系列的工具。
注意: 我们要使用 Build Forge
7.1.1.4 来完成集成操作。
与 Rational Quality Manager 相集成
在 Build Forge i安装文件中编辑 buildforge.conf
文件(您可以在 Windows 系统中的 ../buildforge/apache/tomcat/webapps/rbf-services/WEB-INF/classes/buildforge.conf
位置处找到它),并添加以下的一行:
db_system_password password
其中密码指的是用于集成 Build Forge 和 Rational Quality
Manager(RQM)的密码。
如果 Build Forge 与 Rational Quality Manager
安装在相同的服务器上,那么您可以打开 server.xml 文件(…/apache/tomcat/conf/server.xml),并将本行中的端口号从
8005 更改为 8007:
<server port="8005" shutdown="SHUTDOWN">
在 Rational Quality Manager 之中打开 integration_config.xml,并在代码的起始处和末端删除
<!-- 以及 --> 标记。然后在 <hostname></hostname>
标记内提供 Build Forge 服务器名,以及 <password></password>
标签内 buildforge.conf 文件所提到过的密码。
给 <instanceID></instanceID>
标签内的 Bulid Forge 服务器起一个有意义的名字。
代码清单 7 显示了一个范例。
清单 7:integration_config.xml 文件
<?xml version="1.0" encoding="UTF-8"?> <RTLMExtensionAPIRegistration> <adapter> <name>Build Forge RQM Integration </name> <version>1.0</version> <APIVersionSupported>1.0</APIVersionSupported> <inventoryExtensionId>com.ibm.rational.test.lm.spi.bf.v71.inventory </inventoryExtensionId> <automationExtensionId>com.ibm.rational.test.lm.spi.bf.v71.automation </automationExtensionId> <pluginId>com.ibm.rational.test.lm.spi.bf.v71</pluginId> <instance> <instanceId>some meaningful name</instanceId> <hostname>Build Forge server name</hostname> <port>Build Forge server port</port> <offline>FALSE</offline> <credential> <username>Build Forge server username</username> <password>Integration password</password> </credential> </instance> </adapter> </RTLMExtensionAPIRegistration> |
注意: 如果 Rational Quality
Manager 安装在 IBM? WebSphere? Application Sever 上,那么在
Application servers > server1 > Process Definition
> Java Virtual machine > Custom Properties 处的
Java 系统属性中提供路径 integration_config.xml,并添加一个名为 com.ibm.rational.test.lm.spi.xml.location
的通用属性。
与 Rational Team Concert 相集成
Rational Team Concert(RTC)集成可以帮助您将 Build
Forge 自动化与 Team Concert 之中的追踪性与协作集成起来。当构建在 Build Forge
中激活时,RTC-Build Forge 插件会得到不断地更新,其结果也是实时的状态。 在构建的结尾,步骤结果与日志
以及 BOM 数据 将会在 Rational Team Concert Build Result 之中。
如果您想完成集成步骤,那么您可以查看 Resources 部分中的第一个链接。
|