技术开发 频道

自动化应用程序构建和发布的过程

【IT168 技术文章】

    您已经足够多地考虑了为单一类型的系统构建开放源代码应用程序的情形,但是,如果您正在构建的应用程序需要在多种不同的、不兼容的机器上发布,又该怎么办呢?这个问题不太容易解决,但是,可以使用一些准则和定制的脚本来简化这一过程。本文研究的是如何创建一个构建和发布应用程序的结构,包括高度定制的版本,以及一种能在多种机器上尽可能轻松地传播应用程序(手工地或者自动地)的简单途径。

    我总是在自己的系统亲自动手构建应用程序,而不去使用可用的二进制文件或 RPM 发行版本。这不是因为我不相信 RPM,而是因为对于很多系统来说,我使用的是一个定制的环境。我可能需要启用调试,或者需要一个简化或者特定的扩展名、模块或者其他选项的集合。有时,我甚至会为一个特定项目创建一个完全不同的目录结构。

    因为复杂的缘故,我使用了大量使用开放源代码项目的平台,其中包括 Linux、BSD、OS X,以及各种商业 UNIX发行版本。对于其中一些平台,我可能只有一台机器安装了这种平台;而对另一些平台来说,每种平台可能已经安装在 10 台、20 台甚至 50 台机器上。当软件某个部分的新版本开始可用时,手工地去更新每一台机器会是一项工作量极大的任务。实际的构建和安装过程(假设我们不考虑定制)通常非常简单,如清单 1 所示:

    清单 1. 构建和安装过程

    $ bunzip2 -c latest-release.tar.bz|tar xf -

    $ cd latest-release

    $ ./configure

    $ make

    $ make install

    如果没有某些准则,我很可能要在成百上千台机器上手工去做这些工作。有时,感觉这像是一份只不过设法与最新版本(更不用说出于测试目的而使用某些程序包的 beta 和 alpha 版本了)保持同步的全职工作。

    几年前,我决定通过遵循一些简单的规则并向该过程添加结构,来非常有效地简化这一过程:

    1.为每种 OS 创建一个目录。

    2.在每个 OS 目录中为每一个软件程序包创建一个目录。

    3.为每一个版本创建一个目录。

    4.为每种操作系统构建一次。

    5.在每台机器上多次部署。

    您可以先为所有跨网络共享的软件构建一个合适的结构。

    创建一个中央构建目录

    第一步是创建一个将通过 NFS 共享的目录,它将用来保存将要构建的应用程序。一旦完成构建,您就可以使用这个目录来保存系统所需要的所有内容,包括源文件目录、配置文件以及其他组件。不过,NFS 是关键。要让系统工作,就要能够通过网络,从需要访问正构建和安装的应用程序的所有机器访问这个中央构建目录。

    创建一个顶层结构

    首先要为需要在网络上支持的每一种操作系统创建一个顶层结构。每一个目录都应该明确对应于一种特定的操作系统、体系结构和版本编号(如果变化显著的话)。这些目录应该与您的网络上的机器是相匹配的。例如,在我的网络上,有非常多的机器,所以我的顶层目录结构数量非常大,如清单 2 所示:

    清单 2. 操作系统层目录 in my build environment

    total 58

    drwxrwxrwx   2 root     other        512 Jul 25 12:01 aix/

    drwxrwxrwx   2 root     other        512 Jul 25 13:14 darwin-ppc/

    drwxrwxrwx   2 root     other        512 Jul 25 13:14 darwin-x86/

    drwxrwxrwx   2 root     other        512 Jul 25 12:02 freebsd-x86/

    drwxrwxrwx   2 root     other        512 Jul 25 13:14 freedbsd-sparc/

    drwxrwxrwx   3 root     other       1024 Mar  9  2003 incoming/

    drwxrwxrwx   2 root     other        512 Jul 25 12:02 linux-debian-x86/

    drwxrwxrwx   2 root     other        512 Jul 25 12:02 linux-fedora-1-x86/

    drwxrwxrwx   2 root     other        512 Jul 25 12:02 linux-fedora-2-x86/

    drwxrwxrwx  11 root     other        512 Apr 13 16:56 linux-redhat-9.0-x86/

    drwxr-xr-x   3 root     root        8192 Feb  6  2002 lost+found/

    drwxrwxrwx  13 root     other        512 Jun 15 15:02 macosx/

    drwxrwxrwx   2 root     other        512 Jul 25 12:02 netbsd-x86/

    drwxrwxrwx   2 root     other        512 Jul 25 12:02 openbsd/

    lrwxrwxrwx   1 root     other         12 Jul 25 13:13 solaris -> solaris8-x86/

    drwxrwxrwx   2 root     other        512 Jul 25 13:13 solaris8-sparc/

    drwxrwxrwx  32 root     other       1024 Jul 25 13:12 solaris8-x86/

    drwxrwxrwx   2 root     other        512 Jul 25 13:13 solaris9-sparc/

    drwxrwxrwx   2 root     other        512 Jul 25 13:13 solaris9-x86/

    现在不要过多担心应用程序。这些操作系统目录将用来为每一个 OS 修订版本保存相应的应用程序目录。对应用程序构建的定制将单独存放于每个目录中。

    我使用一个单独的文件系统作为构建目录,导出为/export/build。这个文件系统有足够的空间;对于构建目录,您需要有足够的空间来保存应用程序在每一种操作系统上使用每一个配置的完全构建版本。例如,Perl v5.9.0 编译占用了大约 90 MB 的空间。 Apache 占用了大约 27 MB 的空间。

0
相关文章