调用ftp命令的STAX脚本如下所示:

代码5:调用FTP命令的STAX脚本

    <process>
      <location>'local'</location>
      <command>'ftp'</command>
      <parms>'-s:ftpSample.conf'</parms>
      <workdir>'C:/STAF'</workdir>
    </process>

process标签表示调用STAF的进程服务(process),location表示请求被发送的目标机器,command表示需要执行的进程,而parms表示传递给进程的参数,workdir表示进程运行的工作目录。

通过FTP脚本和STAX脚本,我们可以控制STAX来自动下载FTP上的源代码。

3.2 CVS下载

和FTP类似,CVS源码下载也使用命令行的方式,但由于CVS服务器使用的协议不同,对CVS客户端的要求也不同,因此我们在这里不再介绍如何使CVS客户端工作的内容。假定我们能够使用如下的命令更新CVS代码:
cvs -d :ext:username@cvs.ibm.com:/cvsroot/ checkout -d directory modulename.

根据这个CVS命令,调用此命令更新CVS代码的STAX脚本如下:

代码6:调用FTP命令的STAX脚本

    <process>
      <location>'local'</location>
      <command>'cvs'</command>
      <parms>'-d :ext:username@cvs.ibm.com:/cvsroot/ checkout -d directory modulename'</parms>
      <workdir>'C:/CVS'</workdir>
      <stdout>'C:/CVS/cvsupdate.log'</stdout>
    </process>

与代码 5 不同的是,代码 6 使用了stdout 标签,此标签表示将进程 cvs 的输出重定向到 cvsupdate.log 中,以便于我们查看 cvs 命令执行的状态和结果。

3.3 拷贝编译源码

从 CVS 和 FTP 上下载源码之后,需要将源码拷贝到编译服务器上。本节介绍如何使用 STAF 的文件传输命令以及 STAX 的循环指令。

代码 7:传输文件的 STAX 脚本

    <script> directoryList = ['CVSDirectory', 'FTPDirectory'] </script>
      <iterate var = "directory" in="directoryList">
        <testcase name = "'sourceCopy'">
          <sequence>
            <stafcmd>
              <location>'local'</location>
              <service>'fs'</service>
              <request>'copy DIRECTORY C:/Source/%s TODIRECTORY /root/build/%s TOMACHINE
                buildserver RECURSE KEEPEMPTYDIRECTORIES'  % directory % directory</request>
            </stafcmd>
          </sequence>
        </testcase>
    </iterate>

代码 7 拷贝 CVS 和 FTP 源码到编译服务器中。script 标签定义了一个数组 directoryList,这个数组有两个值,分别表示 CVS 源码目录和 FTP 目录。iterate 定义了一个顺序循环,分别从 CVS 目录和 FTP 目录拷贝文件到编译服务器中。 stafcmd 标签调用 STAF 命令,此处我们调用的是 FS(文件系统)服务。copy DIRECTORY 表示我们需要拷贝整个目录到编译服务器中。 如果编译服务器已经有原来的代码,为了正确起见,可以在拷贝之前使用 fs delete entry 命令来删除原有的文件。

拷贝文件后,需要通知编译服务器对更新后的源码进行编译。假定在编译服务器上存在用于编译源码的脚本文件 /root/build/build.sh,则调用此脚本文件编译源码的 STAX 脚本如代码 8 所示。