内容


利用 Rational Team Concert 和 UrbanCode Deploy 实现持续交付

第 2 部分. 如何扩展构建流程

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 利用 Rational Team Concert 和 UrbanCode Deploy 实现持续交付

敬请期待该系列的后续内容。

此内容是该系列的一部分:利用 Rational Team Concert 和 UrbanCode Deploy 实现持续交付

敬请期待该系列的后续内容。

概述

本系列文章介绍了两种机制,以便集成 IBM Rational Team Concert™ 和 IBM® UrbanCode Deploy 来创建一个持续交付流程。第 1 部分 中介绍了第一种方法,该方法是一个打包的开箱即用实现,很容易建立。第二种方法将在此处的第 2 部分和 第 3 部分 中介绍,该方法会使用对 Ant build.xml 文件的扩展。

备注
使用 Ant 构建流程并不限制您只构建 Java 应用程序。Rational Team Concert 用户已经开始使用 Ant 构建流程,该构建流程中的 Rational Team Concert 扩展可以使用另一种语言(比如 C 和 ADA)来构建应用程序。

示例应用程序

Rational Team Concert 中提供的 JKE Banking 样例项目被用作本文中的示例。通过该示例,您可以快速创建应用程序代码(如果需要的话),然后应用本文中的更改来创建完整的解决方案。此外,您可以使用所下载的文件中包含的附加内容来扩展您自己的 build.xml 文件。

备注
建议不要在生产 Rational Team Concert 环境中创建样例项目,因为该项目创建了许多用户,大多数人不想在其生产系统中包含这些用户。建议在测试 Rational Team Concert 服务器中创建样例项目。

构建定义

一个构建定义出现在 JKE Banking 样例项目 (jke.dev) 中。本文中使用的构建定义被命名为 jke.dev.build_and_deploy。在下面各个小节中,将重点介绍对构建定义所做的更改。

备注
因为您对这个构建定义进行了更改,所以应该采用一个副本并保留原本。

吧uild.xml

build.xml 文件是一个文本文件,它将指示 Ant 构建流程应该执行哪些操作来实现构建流程。如样例项目中所述,它包含指示 Ant 执行以下操作的指令:

  1. 构建一个 jar 文件
  2. 构建一个 war 文件
  3. 将文件压缩成为一个 zip 文件。

然后将该 zip 文件存储为一个构建工件,将它存储在 Rational Team Concert 中的构建记录中。Ant 所执行操作的日志文件也被存储为一个构建工件。原始 build.xml 文件作为 build-Original.xml 文件包含在 zip 文件中。

持续交付的构建扩展

第 1 阶段. 构建安全性

在扩展的第一阶段,对标准 build.xml 流程进行了更改,以便管理 Ant 流程用来连接到 Rational Team Concert 构建流程的密码。其他许多属性也被添加到构建流程后面的阶段中。

Rational Team Concert 的样例 JKE 银行项目中提供的标准 build.xml 文件包含构建用户 ID 和密码的详细信息。这些信息都是以属性的形式提供的,如清单 1 中所示。

清单 1. 用户 ID 和密码
<property name="userId" value="build" /> 
<property name="password" value="build" />

构建和自动化系统的许多用户不想让密码在 build.xml 文件中可见。对于这些人,可以使用包含加密密码的文件的引用来替换清单 1 中的代码,如清单 2 中所示。

清单 2. 加密的密码
<property name="userId" value="build" />    <property name="passwordFile" 
value="${basedir}/EncryptedBuildUserPassword.txt"/>

包含加密密码的文件被存储在与 build.xml 文件相同的目录中。可以使用变量 ${basedir} 在 build.xml 文件中引用它。鉴于从 Rational Team Concert 构建流程加载的内容所在的地方开始,build.xml 文件向下有两个目录(如图 1 中所示)。存储一个标识所加载内容的 ‘根目录’ 的变量可能非常有用:<property name="loadDir" value="${basedir}/../.." />

您可以使用属性 loadDir 作为引用 Rational Team Concert 构建流程管理的加载内容中的任何文件的基点。

图 1. 项目目录结构中的 build.xml 文件
目录结构中的 build.xml 文件
目录结构中的 build.xml 文件

[Rational Team Concert build installation location] > buildsystem > buildengine > eclipse 目录中找到的 jbe 可执行项目创建了加密密码。buildsystem 目录中有一个自述文件。该文件详细介绍了如何使用 JBE 项目创建一个密码文件。

要实现安全增强,可以使用对密码文件的引用来替换对 password 的所有引用。使用 passwordFile="${passwordFile}" 替换 password="${password}"

要添加的第二部分包含许多新的属性定义,它们位于接近文件开头的地方。这些属性被添加到 build.xml 文件,以便为下列许多命令标识工作目录。要生成的目标 war 文件也是通过一个参数进行标识的。

将清单 3 中所示的数十行代码添加到 build.xml 文件中,添加到定义了其他目标目录的其他属性定义的下方。

清单 3. 要添加到 build.xml 文件的属性
<property name="destdir.war" value="${loadDir}/build/war" />
<property name="workingDir" value="${basedir}" />
<property name="target.war" value="jke.war" />

来自 Rational Team Concert 的 Ant 构建扩展任务

为了使用 Rational Team Concert 中提供的 Ant 任务,有两个任务需要完成。第一个任务是在 Ant 库路径上包含 Jazz Build Toolkit 任务的位置。要实现此操作,请选中复选框 Include the Jazz build toolkit tasks on the Ant library path,如图 2 中所示。您会在 Rational Team Concert 构建定义的 Ant 选项卡上找到此选项。

图 2. 在一个构建定义中引用 Jazz 构架工具箱
选中构建上的 Jazz Build Toolkit 选项
选中构建上的 Jazz Build Toolkit 选项

要做的第二个操作是将任务定义添加到 Ant build.xml 文件。起始构建活动任务的任务定义的示例如图 4 中所示。

备注
所需的所有任务定义都已在示例 build.xml 文件中,这被作为此操作的起点。如果用户使用本文中描述的步骤增强现有 build.xml 文件,则必须手动添加任务定义条目。如果出现这种情况,那么只需复制文章底部的下载文件链接中提供的 build.xm 文件中的任务定义块。

清单 4. 开始构建活动函数的示例任务定义
<taskdef name="startBuildActivity"
classname="com.ibm.team.build.ant.task.StartBuildActivityTask" />

图 3 中显示了构建定义、构建结果和相关工件。三个构建被显示,并使用日期和时间构建标签进行了标识。

构建日志文件
构建过程中生成的文本日志文件。在本文创建的扩展中,生成了许多新的日志文件,以便帮助实现调试。
 
快照
保存在 Team Concert 源代码管理设备中的源代码内容在构建的时候被截取了快照。
 
构建工件
构建中生成的 war 文件被存储在构建记录中。
备注:
如果您拥有生成许多大型对象的构建流程,那么您可能想将这些文件复制到某个特定网络共享中,然后在构建结果中发布这些工件的链接。

提供最近接收和构建结果引用的工作项的列表。这有助于展示不同软件开发生命周期元素之间的可追溯性,如图 3 所示。

图 3. 某个构建生成的内容的分层结构
构建工件的分层结构表示
构建工件的分层结构表示

扩展构建记录中的可用信息。图 4 显示了一个变更集的详细信息,该变更集与一项任务有关。生成此链接数据的操作的顺序如下所示:

  1. 分配一名开发人员,Rational Team Concert 任务编号为 1239。
  2. 开发人员开始执行操作,修改(或创建)三个 java 源代码文件和一个项目 build.xml 文件。
  3. 这 4 个文件更改被组织到单个变更集中,然后建立变更集与开发人员任务的关联。
  4. 然后将该任务交付给开发人员正在使用的共享工作流。
  5. 在完成交付工作一段时间过后,一个规划好的构建流程开始启动,并将新交付的变更集标识为自上次构建以来的新变更。该任务被添加到构建记录中的工作项列表中。
图 4. 已扩展构建工件的分层结构 – 1
构建工件的扩展表示  – 1
构建工件的扩展表示 – 1

图 5 扩展了该图,进一步展示了可从开发人员的任务中获得的可追溯性,将它用于软件开发生命周期的其他领域,其中包括:

  • 衍生出任务的案例
  • 阐述这些案例的需求
  • 与该案例相关的测试案例。

图 5 还显示了执行某个测试的结果,该测试失败了,并且导致了一个缺陷。这些浅色的线显示了根据案例、需求和测试案例的缺陷自动创建的链接。最后显示了一个与缺陷相关的变更集,还显示了缺陷已被修复,制定的文件也已被修改。所以该缺陷将出现在下一个构建记录中。

图 5:已扩展的构建工件的分层结构 - 2
构建工件的扩展表示 – 2
构建工件的扩展表示 – 2

第 1 阶段. 小结

在第 1 阶段中,执行了一个简单的更改来确保构建流程的安全性,并添加了许多属性。第 1 阶段还介绍了整个开发生命周期中的可追溯性,这个可追溯性可用于 Rational Team Concert 和相关产品。

第 2 阶段. 将 WAR 文件加载到 UrbanCode Deploy CodeStation 中

在 build.xml 扩展的这个阶段,一个命令行客户端连接到 UrbanCode Deploy,并将生成的 WAR 文件加载到 UrbanCode Deploy 产品的版本存储区域(也称为 CodeStation)。

备注
CodeStation 不是一个单独的产品,它只是 UrbanCode Deploy 中提供的版本存储区域的一个指定名称。

每个 UrbanCode Deploy 组件都可以存储文件的多个版本,以便部署到目标目录。您可以选择不同的版本来实现不同环境的部署,并通过使用一系列的环境执行不同的测试,在生产环境中验证各种活动,改进某个组件的版本。图 6 显示了将 WAR 文件加载到 UrbanCode Deploy 中的结果。

图 6. 将构建内容加载到 UrbanCode Deploy
在 UrbanCode Deploy 中加载一个可部署文件
在 UrbanCode Deploy 中加载一个可部署文件

属性

在 build.xml 文件的顶部将构建流程中使用的属性存储为一系列的定义非常有用。如果需要更改属性(如果您想使用这些文件,而且想在自己的环境中使用它们),可以将它们组织在一起。这使得更改它们变得容易了一些。

清单 5 中显示的属性建立了到 UrbanCode Deploy 服务器的连接,并确认了在其中创建新版本的组件。使用身份验证令牌可以避免在 build.xml 文件中存储明文密码。用于 UrbanCode 部署的服务器名称和身份验证令牌应该都是特定于您的环境的。

清单 5. 属性
<!-- UrbanCode Deploy Connection Properties -->
<property name="Deploy_WebURL" value="https://rational-srv-02:8443" />
<property name="Deploy_AuthToken" value="6b29ed7f-956b-46ed-97ac-f3cbd4e6e876" />
<property name="Deploy_Component" value="Sample Component" />

清单 6 中的属性支持 UrbanCode Deploy 组件版本存储对 Rational Team Concert 构建记录的引用。

清单 6. 存储对构建记录的引用
<!-- RTC information for UrbanCode to use to create a link to the RTC build record --> 
<property name="Deploy_Component_Version_Backlink" value = "Team Concert Build Record" />
<property name="CCM_URL" value="https://rational-srv-02:9443/ccm" />
<property name="BackLink_Base_URL"
	value="${CCM_URL}/web/projects/…#action=com.ibm.team.build.viewResult&amp;id=" />

负责部署活动的人可以快速找到合适的构建记录,然后轻松地发现已交付给该构建的工作项。如果使用了 Rational 产品的需求和测试管理功能,那么可以遵循进一步的可追溯性链接来获得需求和测试案例。

备注:
在清单 6 中,最后一项的值被缩短了。要了解哪个构建记录 URL 适合您的站点和 Rational Team Concert 项目,可以在 Web 浏览器中加载一个构建记录,并从项目名称中复制 URL(包括 &id=)。跟在 &id= 后面的构建 ID 被作为 URL 构造流程的一部分添加,本文的第 4 阶段中描述了该流程。

备注:
&amp; 被用在清单 6 中所示的 URL 中。

清单 7 是一个日志文件,用于收集有关组件版本创建流程的信息。在出现错误时,此文件是否是有用的调试信息来源?

清单 7. 用来收集信息的日志文件
<!-- Log files used by the connectivity to UrbanCode Deploy --> 
<property name="DeployComponentVersionCreate"
		value="${workingDir}/DeployComponentVersionCreate.log" />

部署构建目标

一个新的目标被添加到 build.xml 文件,以便包含与 UrbanCode Deploy 交互的任务。这允许您在执行部署交互操作时进行选择,并允许您快速应对编译和单元测试活动,以便在无需与 UrbanCode Deploy 进行交互的情况下继续后面的操作。

要添加的目标包含在清单 8 的 build.xml 行中。

清单 8. 添加一个目标
<target name="deploy" depends="compile">
</target>

新的目标取决于编译流程,在试图将新的 WAR 文件添加到 UrbanCode Deploy 中的新组件版本之前,该流程需要生成一个新的 WAR 文件。

要在每次进行构建时执行部署操作,必须在主构建目标中包含 Deploy 目标,如清单 9 中所示。

清单 9. Deploy 目标
<target name="all"
depends="compile, deploy" />

UrbanCode Deploy 命令行接口

在完成下面这些步骤之前,必须安装 UrbanCode Deploy 命令行接口。这很容易实现,可以从 UrbanCode Deploy Web 界面右手边的工具菜单中下载它。将 zip 文件解压缩到构建服务器上的某个位置,并将该位置添加到构建服务器的路径中。从一个新的命令窗口停止并重新启动运行构建引擎。如果您没有停止并重新启动构建引擎流程,则无法访问 UrbanCode 命令行接口。

UrbanCode Deploy 登录

Deploy 目标的第一步是登录到 UrbanCode Deploy。这是使用 udclient 命令行接口的第一个实例(使用了用于登录的参数、用于身份验证令牌的子参数,以及用于建立连接的 url)。这两个都来自以前定义的属性。清单 10 中显示了用于登录的 build.xml 命令。

清单 10. 登录命令
<exec executable="cmd" dir="${workingDir}">
    <arg value="/c"/> 
    <arg value="udclient"/> 
    <arg value="login" /> 
    <arg value="-authtoken"/> 
    <arg value="${Deploy_AuthToken}"/> 
    <arg value="-weburl"/> 
    <arg value="${Deploy_WebURL}"/> 
</exec>

使用 StartBuildActivity 报告构建进度

StartBuildActivity 构建命令是本文中的许多操作的第一部分。它报告了用户将要执行的命令,以便在 Eclipse 或 Web 界面中查看构建。它还在构建记录中记录了构建的阶段。构建记录位于 Rational Team Concert 数据库中。图 7 显示了一个报告 Eclipse 用户界面的构建进度的示例。

图 7. 报告构建阶段进度
显示了构建阶段的信息文本
显示了构建阶段的信息文本

StartBuildActivity 语句的 label 字段包含对一个组件名称的引用,该组件是在文件开始处的属性部分中定义的。

清单 11. StartBuildActivity
<startBuildActivity activityIdProperty="CreateDeployComponentVersion"
    label="Create new component version - ${Deploy_Component}"
    buildResultUUID="${buildResultUUID}" 
    repositoryAddress="${repositoryAddress}"
    userId="${userId}" passwordFile="${passwordFile}" 
    autoComplete="true" />

在 UrbanCode Deploy 中创建组件版本

在完成登录后,下一步是在 UrbanCode Deploy 中创建组件的新版本。在创建新版本后,它最初并没有存储内容,因为添加内容将作为一个单独的步骤。该命令的第一个参数与 login 命令的相同,然后这里给出了其他选项,其中包括 createVersion 选项、组件标识符和要创建的新版本的名称。版本的名称(${buildLabel})被传递给 ant 执行操作,该操作由 Rational Team Concert 构建流程执行。默认情况下,构建标签是一个日期和时间。

清单 12. 参数选项
<exec executable="cmd" dir="${workingDir}"
    output="${DeployComponentVersionCreate}" >
    <arg value="/c"/>
    <arg value="udclient"/>
    <arg value="-authtoken"/> 
    <arg value="${Deploy_AuthToken}"/> 
    <arg value="-weburl"/> 
    <arg value="${Deploy_WebURL}"/> 
    <arg value="createVersion"/> 
    <arg value="-component"/>  
    <arg value="&quot;${Deploy_Component}&quot;"/> 
    <arg value="-name"/> 
    <arg value="${buildLabel}"/> 
</exec>

版本创建过程中的最后一个命令是存储通过执行 createVersion 命令生成的日志文件,如清单 12 中所示。输出参数引用了以前在 build.xml 文件中定义的一个参数,build.xml 文件是保存在构建机器的目录结构中的一个文件。该日志文件可以使用清单 11 中所示的命令发布到 Rational Team Concert 构建记录中。日志文件的文本描述包含组件名称,在客户的大型构建中,客户有许多组件,因此可能需要确认哪个日志与哪个组件是相关的。

清单 13. 日志文件存储
<logPublisher filePath="${DeployComponentVersionCreate}"
    label="Create new component version - ${Deploy_Component} / ${buildLabel}"
    buildResultUUID="${buildResultUUID}" repositoryAddress="${repositoryAddress}" 
    userId="${userId}" passwordFile="${passwordFile}" verbose="true"/>

将内容添加到一个新组件版本中

在 UrbanCode Deploy 中创建组件版本后,必须将可部署的内容加载到版本引用中。版本内容创建的第一部分是使用 StartBuildActivity 构建命令。

版本内容创建的第二部分是在 UrbanCode Deploy 中使用 udclient 命令将新的内容加载到组件版本中。该命令的第一个参数与 login 命令的相同。addVersionFiles 命令、组件标识符和将要加载的文件的位置也包含在内。

清单 14. 更新版本引用
<startBuildActivity activityIdProperty="AddDeployComponentVersion"
    label="Add component version to CodeStation - ${Deploy_Component}"
    buildResultUUID="${buildResultUUID}" repositoryAddress="${repositoryAddress}"
    userId="${userId}" passwordFile="${passwordFile}" autoComplete="true" /> 

<exec executable="cmd" dir="${workingDir}" >
    <arg value="/c"/> 
    <arg value="udclient"/> 
    <arg value="-authtoken"/> 
    <arg value="${Deploy_AuthToken}"/> 
    <arg value="-weburl"/> 
    <arg value="${Deploy_WebURL}"/> 
    <arg Value="addVersionFiles"/> 
    <arg Value="-component"/> 
    <arg Value="&quot;${Deploy_Component}&quot;"/> 
    <arg Value="-version"/> 
    <arg Value="${buildLabel}"/> 
    <arg Value="-base"/> 
    <arg Value="${destdir.distro}"/> 
    <arg Value="-include"/> 
    <arg Value="${target.war}"/> 
</exec>

第 2 阶段. 小结

在完成第 2 阶段后,持续交付流程会将内容作为包含新建 war 文件的新组件版本,从 Rational Team Concert 构建推送到 UrbanCode Deploy 中。

第 3 阶段. 创建一个连接到 RTC 构建记录上的组件版本的链接

因为本文的目标是创建一个从开发团队到开发环境的无缝信息流,所以创建一个从 Team Concert 构建记录到新建组件版本的链接非常有用。这支持开发人员轻松地查看可部署内容,了解内容已被部署到哪些环境中。

链接的格式如下:https://<UrbanCode server name>:<UrbanCode secure port>/#version/<component version ID>

下面几个小节的目标是获得组件版本 ID,生成 URL,并将它存储在 Team Concert 构建记录中。

获取组件版本 ID

组件版本 ID 可以从上面显示的 createVersion 命令的 JSON 格式输出结果中获得。为了实现此操作,将会从构建脚本执行一个 Java 应用程序,以便处理 createVersion 命令的输出,并提取 ID。该 Java 应用程序在本文的其他文件(文件 getJSONPropertyValue.zip)中是以源代码的形式提供的。它提供了一个 build.xml 文件来支持您完成构建。您可以通过在 Rational Team Concert 中创建一个构建定义来构建可执行文件。在完成构建后,可以将生成的 jar 文件添加到以下目录:JKEBuildScripts \ sample.jke.build \ Support \ get-JSON-property-value.jar,然后将它交付给流。完成更改后,在交付 build.xml 文件的时候,可以遵循相同的步骤。

要从 build.xml 文件执行应用程序,需要将其他许多属性添加到 build.xml 文件的顶部的现有属性部分。清单 15 中显示了要添加的属性。

清单 15. 其他属性
<!-- Properties for a JSON processing application that will extract the component version ID --> 
<property name="getJSONPropertyValue"
    value="${workingDir}/Support/get-JSON-property-value.jar"/>
<property name="getJSONPropertyValue-Log" value="${workingDir}/getJSONPropertyValuelog.txt"/>
<property name="DeployComponentVersionCreationIDFile"
    value="${workingDir}/DeployComponentVersionCreationIDFile.txt"/>
<property name="VersionCreationJSONTitle" value="id"/>

路径部分被添加到第 2 阶段中所添加命令的下方的 Deploy 目标。这支持执行 java 应用程序来找到已编译的 jar 文件。

清单 16. 添加路径部分
<path id="getJSONPropertyValuePaths">
    <pathelement path="."/> 
    <pathelement path="${getJSONPropertyValue}" /> 
</path>

然后执行 java 命令处理来自 createVersion 命令的数据。该命令的参数是:

  • Input file:从上述 createVersion 命令生成的输出文件。
  • Title:JSON 格式的标题(将为其提取值)。
  • Output file:要执行的文件的名称。该文件包含已提取的数据。

下方显示了一个输入文件的示例。所请求的信息是 id 字段。

清单 17. 输入文件
{
    "id": "1044c181-b77c-4468-b1e8-0fc72cc370e0",
    "name": "I20140506-2120",
    "type": "FULL",
    "created": 1399407705637,
    "active": true,
    "archived": false
}

清单 18 中显示了需要执行 java 应用程序的 xml 部分,包含所需的属性。

清单 18. XML with required properties
<java jar="${getJSONPropertyValue}" output="${getJSONPropertyValue-Log}" fork="true">
    <classpath refid="getJSONPropertyValuePaths" />
    <arg value="inputFile=${DeployComponentVersionCreate}" />
    <arg value="Title=${VersionCreationJSONTitle}" />
    <arg value="outputFile=${DeployComponentVersionCreationIDFile}" />
</java> 

输出文件是在运行该命令之后创建的。输出文件包含组件版本 ID:1044c181-b77c-4468-b1e8-0fc72cc370e0。

下一步是读取文件内容,并获得 ID,将它放入一个属性值中,以便在后面的步骤中可以使用它。该命令将文件加载到一个属性中,如清单 19 所示。它还包含一个 echo 命令,以便在构建日志文件中显示 ID。

清单 19. 加载文件命令
<loadfile property="DeployComponentVersionCreationID"
srcFile="${DeployComponentVersionCreationIDFile}"/> 
<echo message="ID of Component version =${DeployComponentVersionCreationID}" />

发布一个连接到构建记录中的组件版本的链接

使用 Rational Team Concert link publisher 命令发布一个从标头 URL 构造的 URL,并将它定义为文件顶部的属性,从上面步骤的文件中提取 ID。将所需的标头 URL 属性添加到 build.xml 文件,如清单 20 中所示。

清单 20. 标头 URL 属性
<property name="DeployVersionLinkHeader" value="${Deploy_WebURL}/#version/"/> 
清单 21. 发布链接
<!-- Publish Link to Deploy Component Version on RTC Build Result -->
<linkPublisher label="UrbanCode Deploy Component - ${Deploy_Component}"
url="${DeployVersionLinkHeader}${DeployComponentVersionCreationID}"
componentName="Component Versions" buildResultUUID="${buildResultUUID}"
repositoryAddress="${repositoryAddress}" userId="${userId}"
passwordFile="${passwordFile}" failOnError="false" />

第 3 阶段. 小结

在完成第 3 阶段后,持续交付流程可以将内容从 Rational Team Concert 构建推送到 UrbanCode Deploy 中。此时还会建立从构建记录到组件版本的链接。

第 4 阶段. 创建一个连接到组件版本上的构建记录的链接

除了第 3 阶段中创建的链接之外,创建一个从组件版本连接回 Rational Team Concert 中的构建记录的链接也很有用。这使得主要负责部署的人可以轻松地找到 Rational Team Concert 工作项,这些工作项包含在用来创建他们正在使用的组件版本的构建中。然后,您可以从这些工作项关注测试案例和需求的其他可追踪性链接,如图 5 中所示。

属性

一个新的属性被添加到执行命令上,如清单 22 中所示,该属性用于反向链接 URL,来自 build.xml 文件中以前定义的值。

清单 22. 添加一个新属性
<property name = "Build_Backlink" value = "${BackLink_Base_URL}${buildResultUUID}" />

build.xml 文件中的命令用于创建和公布链接,如清单 23 中所示。

清单 23. 创建和公布链接
<exec executable="cmd">
    <arg value="/c"/>
    <arg value="udclient"/>
    <arg value="-authtoken"/>
    <arg value="${Deploy_AuthToken}"/>
    <arg value="-weburl"/>
    <arg value="${Deploy_WebURL}"/>
    <arg value="addVersionLink"/>
    <arg value="-component"/>
    <arg value="&quot;${Deploy_Component}&quot;"/>
    <arg value="-version"/>
    <arg value="${buildLabel}"/>
    <arg value="-linkName"/>
    <arg value="&quot;${Deploy_Component_Version_Backlink}&quot;"/>
    <arg value="-link"/>
    <arg value="&quot;${Build_Backlink}&quot;"/>
</exec> 

第 3 阶段中创建的链接的结果如图 8 中所示。

图 8. UrbanCode Deploy 与 Rational Team Concert 之间的链接
 RTC 构建与 UrbanCode Components 之间的链接
RTC 构建与 UrbanCode Components 之间的链接

第 4 阶段. 小结

在第 4 阶段中,介绍了持续交付流程,将内容从 Rational Team Concert 构建推送到 UrbanCode Deploy 中,还创建了一个从组件版本到构建记录的链接。

结束语

本文介绍了持续交付流程的第一部分,如果您有复杂的构建流程(生产内容,将内容放入多个 UrbanCode 组件),那么本文非常适合您。本系列的最后一篇文章将向您展示如何启动一个部署来完成持续交付流程。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational, DevOps
ArticleID=1002835
ArticleTitle=利用 Rational Team Concert 和 UrbanCode Deploy 实现持续交付: 第 2 部分. 如何扩展构建流程
publish-date=04082015