本文探讨了将
Perforce 软件与 IBM? Rational Team Concert? 相集成的模式。它包含了关于集成的一个范例程序。
概述
您可以使用一个替代性的软件配置管理(SCM)与 IBM? Rational
Team Concert?,而不是默认的版本控制系统(参见 参考资料 以得到“使用 Rational Team
Concert 2.0 集成其它 SCM 系统”的链接)。本文演示了怎样根据基于不同用例的两个不同的集成模式,怎样将
SCM 系统与 Rational Team Concert 集成起来:
launch-from-rtc
launch-from-p4
集成模式
launch-from-rtc 模式的工作方式是在技术性领导分配工作项时,创建
Perforce 任务,然后在 Rational Team Concert 中创建任务与工作项之间的关系。您可以创建
Perforce 更改列表,并将其与工作项目联系起来。通过使用这些已经存在的任务与更改列表,开发员可以使用
Perforce 来检入和检出文件,而不用去关注工作项。在文章的后面,有实施该模式的程序。
图 1. launch-from-rtc
模式
提交变更列表时,launch-from-p4 模式通过创建 Rational Team Concert
之中 Perforce 变更列表与工作项之间的双边关系来发挥作用。附属于更改列表和工作项的 Perforce
任务可以相互联系。拥有 Perforce 的开发员可以在开发过程之中根据需求,通过选择其 ID 来将其他的更改列表与工作项动态地联系起来。在名为“将
Perforce 软件与 Rational Team Concert 集成起来”的文章中,描述了实施的该种模式和程序。(参见
参考资料)。
图 2. launch-from-p4 模式
这两种模式相互补助,而且不会发生冲突。您可以使用其中的一个来处理不同的用例。您也可以选择,在使用 launch-from-rtc
模式之后,开发员可以使用 launch-from-p4 模式来添加更改列表。
创建
需要的软件环境
本文使用的范例在 Microsoft Windows 环境下运行。cURL 与 Perl 并不仅限于
Cygwin 运行时系统。
1、Perforce 需要的环境
1.命令行客户端(P4)
P4 必须安装到与 Rational Team Concert 相同的机器上。
名为 p4tester 的用户,其密码是 p4tester,使用 P4。
2.可视的客户端(P4V)。
开发员必须使用 P4V 来检入或者检出文件。
3.服务器(P4D)
P4D 必须在 1666 端口上运行。
4.网络客户端(P4Web)
P4Web 可以安装在与 P4D 相同的机器之上。
P4Web 必须在查看者模式中 -B 选项下运行,以支持从远程机器上进行访问。
工作项的链接是 http://(the same machine as P4D):8080/xxx
P4Web 可以安装在每一个开发员的机器上,但是不能安装到有 P4D 的机器上。
P4Web 运行在默认模式下,以支持每一个开发员从本地访问它。
工作项上的链接是 http://localhost:8080/xxx
P4Web 必须在 8080 端口上运行。
2、Rational Team Concert 3.0 版本的运行要求
1.Eclipse IDE 客户端
名为 tester 的用户,其密码是 tester,使用 Eclipse IDE 客户端。
名为 TestProject 的项目区域必须由用户创建。
2.服务器
服务器必须在 9443 端口上运行。
3、Cygwin cURL,Perl 的运行条件
cURL 与 Perl 必须安装到与 Rational Team Concert 服务器相同的机器上。
图 3. 系统配置
安装 Perl 脚本
1.将 launch-from-rtc.pl 与 P4RTC.pm 复制到安装
Rational Team Concert(RTC)服务器的位置,也就是 C:\cygwin\usr\local\p4rtc-pl。
2.编辑以下的环境参数,以匹配 P4RTC.pm 中的环境:
Perforce: $P4RTC::p4web,$P4RTC::p4d_port,$P4RTC::p4user,$P4RTC::p4pass,$P4RTC::p4user_client Rational Team Concert: $P4RTC::rtc_user,$P4RTC::rtc_pass,$P4RTC::rtc_serv,$P4RTC::rtc_path |
为 Rational Team Concert 安装插件
1.确定 Rational? Jazz? 服务器被关闭。
2.将 p4bridge.site 复制到 C:\ProgramFiles\IBM\JazzTeamServer\server\conf\ccm\sites
3.将 p4bridge.ini 复制到 C:\ProgramFiles\IBM\JazzTeamServer\server\conf\ccm\provision_profiles
4.将属性添加到 C:\ProgramFiles\IBM\JazzTeamServer\server
之下的 server.startup.bat(参见清单 1)。需要的属性是 p4rtc.runtime
以及 p4rtc.program,运行联系程序的运行时路径,联系程序的路径,将分别使用到它。属性 p4rtc.skipword
是可选性的,如果工作项总结区域中词语已经存在的话,那么它是用于跳过操作的词。p4rtc.checkbox
属性是可选性的,并且用作复选框的标签,以决定是否运行相关的程序。
清单 1. 设置属性的范例
set JAVA_OPTS=%JAVA_OPTS% -Dp4rtc.runtime="C:\\cygwin\\bin\\perl.exe" set JAVA_OPTS=%JAVA_OPTS% -Dp4rtc.program="C:\\cygwin\\usr\\local\\ p4rtc-pl\\launch-from-rtc.pl" set JAVA_OPTS=%JAVA_OPTS% -Dp4rtc.skipword=p4skip set JAVA_OPTS=%JAVA_OPTS% -Dp4rtc.checkbox=p4link |
5.启动 Jazz 服务器。
6.编辑 save workitem 的操作性行为:
1)打开属性区域。
2)点击 Process Configuration > Team
Configuration > Operation Behavior > Workitem
> Save workitem 来选择一个角色。
3)点击 Add。
4)选择 Create and link P4 objects in Save(P4
Bridge)(参见 图 4)。
5)点击 OK 然后点击 Save。
图 4. 选择 P4 桥
7.(可选性的)如果您更新插件,而且必须再次复制的话,您可以使用 Request
Server Reset:
1)https://hostname:port/ccm/admin?internal#action=com.ibm.team.repository.admin.serverReset
2)关闭 Jazz 服务器,执行第 2 步,然后重启 Jazz 服务器。
在 Rational Team Concert 中定制工作项编辑器(可选性的)
在有些情况下,当您在 Rational Team Concert 中创建工作项时,用户想要决定是否创建
Perforce 对象。一个选择是通过定制工作项编辑器来添加一个复选框。在创建工作项时,如果用户想要创建和联系
Perforce 对象,那么他们可以选中复选框;或者,可以取消它的选择(图 5)。
图 5. 添加一个复选框
为了向工作项编辑器添加一个复选框,您必须添加属性,并就特定的布局作出决策。
1.使用 Project Area 编辑器来打开一个项目区域。
2.编辑类型和属性,以向工作项编辑类型和属性:
1)展开 Process Configuration > Project
Configuration > Configuration Data > Work Items
> Types and Attributes。
2)选择一个工作项类型(图 6)。例如,点击 Defect 以为缺陷类型展开工作项编辑器。
图 6. 选择一个工作项类型
3.在 Attributes 之中点击 Add 以填充以下的区域,然后点击
OK(图 7):
1)名字: p4link
2)ID: p4link
3)类型: Boolean
图 7. 向工作项类型添加一个属性
4.重复第 2 步到第 3 步以进一步地定制工作项。
5.编辑编辑器的外观,以决定添加属性将会出现位置的布局:
1)展开 Process Configuration > Project
Configuration > Configuration Data > Work Items
> Editor Presentations。
2)选择一个工作项类型(图 8)。例如,选择 com.ibm.team.workitem.editor.default
以为缺陷类型展开工作项编辑器。
3)点击 Overview 之下的 Details,并点击 Add Presentation。
基于属性的形象: 选中
属性: p4link
类型: Boolean
标签(可选性的):p4link
描述(可选性的): 将工作项与 p4 对象联系起来
ID(可选性的): p4link
隐藏在工作流程状态之中:正在选择,新的,已解决,缺陷工作流程已确认
4)图 9 显示了属性 p4link 位于 Details 窗格较后的位置。
5)重复第 b 步到第 d 步以定制工作项的类型。
图 8. 为布局选择一个工作项类型
图 9. 向一个布局添加一个属性
用例
接下来的用例发生在两种角色之间:技术性领导和开发员。
1.技术性领导在 Rational Team Concert 之中创建了一个工作项。
一个 开关 来控制是否创建 Perforce 任务和变更列表。这里,该开关是作为复选框和工作项中的关键字实施的。如果定制的复选框存在的话,那么决策决定会确认复选框的值。如果复选框不存在的话,那么根据工作项目总结区域是否有复选框,来做出决策。
如果选中开关的话,那么 Perforce 任务和更改列表都会得到自动创建,保存过程中它们会与工作项联系起来(图
10)。
如果没有选中,那么 Perforce 任务和更改列表都不会得到创建。
2.T开发员会从 Rational Team Concert 中接受新工作项的电子邮件通知。
3.开发员在 Perforce 更改列表之中的区域内检出,编辑,并检入。
4.技术性领导会编辑工作项的状态,并从 Rational Team Concert
那里收到状态更改的通知。
注意:
更改工作项的状态并不会创建一个 Perforce 更改列表或者任务。只是在创建工作项时才会创建它。
5.开发员会使用 Perforce 任务,然后关闭 Perforce 任务,来提交文件。
6.技术性领导会确认 Perforce 任务关闭,然后关闭工作项。
图 10. 与 Perforce 任务与更改列表的联系
实施
为了在 Rational Team Concert 中创建工作项时自动创建一个 Perforce 任务和更改列表,那么工作项的保存过程必须被
暂停,以执行 Perforce 命令,创建 Perforce 任务和更改列表。通过实施 com.ibm.team.process.common.advice.runtime.IOperationAdvisor
的 run 方法,可以完成该操作。run 方法可能需要这些步骤。
1.创建一个 Perforce 任务和更改列表。
2.在 Perforce 任务和更改列表的描述区域之中输入工作项的 URL。
3.将 Perforce 任务和更改列表的 URL 输入到 Rational
Team Concert 中工作项的相关区域内。
注意:
第三部有一些问题。更新工作项的区域在 run 方法中不能执行,因为更新会调用其他的保存过程,这将导致死循环的产生。我们建议您只在第三步方法创建和启动一个新的方法。run
方法完成之后,外部性的脚本会处理新创建线程内的三个步骤。
为 Rational Team Concert 实施插件
如果您想要查看怎样为 Rational Team Concert 创建插件的完整介绍,您可以查看“Rational
Team Concert - Creating Custom Operation Advisors”,参见
参考资料。接下来的程序向您展示了怎样创建插件,特性,并更新本文中所使用到的网站项目。
1.为 Rational Team Concert 3.0 版本创建
SDK(参见 RTCSDK20 Development Environment Setup 中“创建 Target
Platform”)。
1)下载 Rational Team Concert 3.0 并解压 Rational
Team Concert SDK。
2)选择 Window > Preferences > Plug-in
Development > Target Platform > Add,并点击 Nothing:
Start with an empty target definition。
3)然后点击 Next。
4)在 Name 区域中,输入 RTC-SDK-30,并在 Locations
项上点击 Add。
5)点击 Installation,然后点击 Next。
6)浏览解压缩后 Rational Team Concert SDK 的根目录,点击
Finish,然后再次点击 Finish。
7)在 Target Definitions 上点击 RTC-SDK-30。
8)点击 OK。
2.创建插件项目:
1)项目名: p4bridge
ID:p4bridge
版本: 1.0.0.qualifier
名字:p4bridge
取消选择 生成一个激活器,一个控制插件生命周期的 Java 类 。
2)在 plugin.xml 文件中的 Overview 项上选择 This
plug-in is a singleton。
3)在 plugin.xml 文件的 Dependencies 项上添加以下需要的插件:
org.eclipse.core.runtime com.ibm.team.process.common com.ibm.team.process.service com.ibm.team.workitem.common com.ibm.team.repository.common com.ibm.team.repository.service com.ibm.team.workitem.service |
4)填入 plugin.xml 文件的 Extensions(图 11,图
12):
扩展点: com.ibm.team.process.service.operationAdvisors
ID:p4bridge.operationAdvisor
类:p4bridge.P4BridgeCreateAndLinkInSave
名字: Create and link P4 objects in Save(P4 Bridge)
operationID: com.ibm.team.workitem.operation.workItemSave
右击 operationAdvisor,并输入 componentId,implementationClass,并选择
New > extensionService。
componentId:p4bridge.extensionService
implementationClass:p4bridge.P4BridgeCreateAndLinkInSave
右击 extensionService,并切换至plugin.xml 项,并添加 com.ibm.team.workitem.service.IWorkItemServer
作为 requiredService,来选择 New > prerequisites(清单 2)。
在 New Java Class 对话框窗口之中,点击 class 链接以创建实施 com.ibm.team.process.common.advice.runtime.IOperationAdvisor
的类,然后实施 P4BridgeCreateAndLinkInSave 类(参见 清单 3)。
保存。
3.创建 Feature 项目:
1)项目名:p4bridge.feature
2)特性 ID: p4bridge.feature
3)特性名: p4bridge feature
4)特性版本:1.0.0.qualifier
5)在 New Feature 对话框窗口的 Referenced Plug-ins
以及 Fragment 部分之中,选择 p4bridge。
4.创建 Update Site 项目:
1)项目名:p4bridge.site
2)在 site.xml 文件的网站地图项上点击 Add Feature,并选择
p4bridge.feature。
5.构建,导出,并创建:
1)在 p4bridge.site 项目中右击 site.xml 文件,选择
PDE Tools > Build Site。
2)右击 p4bridge.site 项目来选择 Export >
File System。
3)在目录中输入文件路径。点击 Finish。
4)安装插件(参见创建部分中的 为 Rational Team Concert
安装插件)。
6.如果新创建的插件没有出现在进程配置中时,那么进行故障排除操作:
1)确认 p4bridge 项目中 plugin.xml 文件的 Bulid
项上,选择了 plugin.xml。
2)使用 Request Server Reset,并重启 Jazz 服务器以清除缓存。
3)重启 Eclipse 客户端以清除缓存。
清单 2. 前提条件之下添加需要的服务
... <extensionService componentId="p4bridge.extensionService" implementationClass="p4bridge.P4BridgeCreateAndLinkInSave"> <prerequisites> <requiredService interface="com.ibm.team.workitem.service.IWorkItemServer" /> </prerequisites> </extensionService> ... |
图 11. 定义 operationAdvisor
图 12. operationAdvisor
的相信信息
清单 3 是 com.ibm.team.process.common.advice.runtime.IOperationAdvisor
界面的 run 方法。有三点值得注意:
首先,该方法只在创建一个新的工作项时起作用,这样 getOldState 方法返回 null 值时,方法才会得到执行。
第二,根据工作项编辑器是否有定制的复选框,或者工作项的总结区域中是否有关键字,决定是否进行跳过操作。
第三,一个新的方法,thRun,调用一个外部性的脚本来处理 run 方法完成之后 Perforce 任务和更改列表的创建于链接问题。
清单 3. P4BridgeCreateAndLinkInSave 类中的运行方法实施 IOperationAdvisor
界面
private int workitem_id; ... public void run(AdvisableOperation operation, IProcessConfigurationElement advisorConfiguration, IAdvisorInfoCollector collector, IProgressMonitor monitor) throws TeamRepositoryException { ... Object op_data = operation.getOperationData(); if (op_data instanceof ISaveParameter) { IAuditable new_state = ((ISaveParameter) op_data).getNewState(); IAuditable old_state = ((ISaveParameter) op_data).getOldState(); /* * The 1st point. * a linking program can be executed only during the creation of work items. */ if (old_state == null && new_state instanceof IWorkItem) { /* * do these. * - check the existence of the customized check box. * - get a boolean value of the check box if it exists. */ boolean doP4Link = false; IWorkItem workItem = (IWorkItem) new_state; IWorkItemServer wiService = getService(IWorkItemServer.class); List<IAttributeHandle> attrs = workItem.getCustomAttributes(); boolean doesP4RtcCheckboxExist = false; if(attrs != null){ for (IAttributeHandle attrHandle : attrs) { IAttribute attribute = wiService.getAuditableCommon().resolveAuditable(attrHandle, IAttribute.FULL_PROFILE, monitor); if (attribute.getDisplayName().equals(p4rtc_checkbox)) { // the customized checkbox exists. doesP4RtcCheckboxExist = true; Object value = workItem.getValue(attribute); if( value instanceof Boolean){ // get the value of the checkbox. doP4Link = (Boolean)value; } } } } // get summary text for skipping decision by key word String summary = workItem.getHTMLSummary().getPlainText(); /* * The 2nd point. * a linking program is decided to be executed in either of these two conditions. * - checkbox exists and the value is true * - the checkbox does not exist and a key word does not exist in summary text */ if((doesP4RtcCheckboxExist && doP4Link) || (doesP4RtcCheckboxExist == false && summary.contains(p4rtc_skipword) == false)){ try{ workitem_id = workItem.getId(); Runnable th = new Runnable(){ public void run(){ try{ ProcessBuilder pb = new ProcessBuilder(p4rtc_runtime_path, p4rtc_program_path, "" + workitem_id); pb.redirectErrorStream(true); // The 3rd point. a linking program is executed outside of the plug-in. Process ps = pb.start(); getStdout(ps); }catch(Exception e){ e.printStackTrace(); } } }; Thread thRun = new Thread(th); thRun.start(); }catch(Exception e){ e.printStackTrace(); } }else{ //skip p4 link } } } } ... |
实施 Perl 脚本
对于本文,我们可以按照下面的步骤在 Perl 中实施外部性的脚本:
1.登录到 Perforce 服务器。
2.创建一个 Perforce 任务:
1)将前缀 job_rtc 加到工作项的 ID 前面。
2)将工作项的 URL 加到描述区域内。
3.(可选性的)创建一个 Perforce 变更列表。
1)将 Perforce 任务的名字输入到 Jobs 区域内。
2)将工作项目的 URL 输入到 Description 区域内。
4.登录到 Rational Team Concert 服务器。
5.确定工作项已经保存在 Rational Team Concert 之中。
6.更新工作项:
1)将 Perforce 任务的 URL 输入到相关的链接区域。
2)(可选性的)将 Perforce 变更列表的 URL 输入到相关链接区域。
3)(可选性的)将其他的信息输入到讨论区域内。
总结
本文描述了通过遵循 launch-from-rtc 模式,将 Perforce 软件与 Rational
Team Concert 集成起来。它显示了作为范例的源代码和脚本。下一步,Perforce 中任务的状态以及
Rational Team Concert 中工作项的状态可以得到同步化,这样当任务关闭时,工作项的状态也会得到自动关闭,反之亦然。
|