自动化应用程序构建和发布的过程
作者:咖啡Spring_767 | 来源:互联网 | 2017-06-25 21:46
文章标题:自动化应用程序构建和发布的过程。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类
您已经足够多地考虑了为单一类型的系统构建开放源代码应用程序的情形,但是,如果您正在构建的应用程序需要在多种不同的、不兼容的机器上发布,又该怎么办呢?这个问题不太容易解决,但是,可以使用一些准则和定制的脚本来简化这一过程。本文研究的是如何创建一个构建和发布应用程序的结构,包括高度定制的版本,以及一种能在多种机器上尽可能轻松地传播应用程序(手工地或者自动地)的简单途径。 我总是在自己的系统亲自动手构建应用程序,而不去使用可用的二进制文件或 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 版本了)保持同步的全职工作。 几年前,我决定通过遵循一些简单的规则并向该过程添加结构,来非常有效地简化这一过程: 为每种 OS 创建一个目录。 在每个 OS 目录中为每一个软件程序包创建一个目录。 为每一个版本创建一个目录。 为每种操作系统构建一次。 在每台机器上多次部署。 您可以先为所有跨网络共享的软件构建一个合适的结构。 创建一个中央构建目录 第一步是创建一个将通过 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 的空间。 创建应用程序结构 您需要在每一个操作系统目录中为想要安装的每一个应用程序另外创建一个目录。注意,该目录是明确对应于每一种 OS 的,您应该只创建实际需要的应用程序目录。例如,您可能希望在 Fedora 机器上安装 Perl,但不想在其他机器上安装它。在清单 3 中可以看到一个示例规划: 清单 3. 一个 OS 目录中的应用程序目录 drwxrwxrwx 4 mc staff 512 May 12 12:30 apache/ drwxrwxrwx 4 root other 512 Apr 16 2003 assassin/ drwxrwxrwx 3 501 other 512 Jun 11 10:11 bind/ drwxrwxrwx 3 root other 512 Jul 24 15:37 ccache/ drwxrwxrwx 5 root other 512 Jun 21 17:12 clamav/ drwxrwxrwx 6 root other 512 Jul 25 15:28 cpan/ drwxrwxrwx 4 root other 512 Jul 25 12:35 cpanplus/ drwxrwxrwx 4 root other 512 Sep 6 2003 cyrus/ drwxrwxrwx 3 root other 512 Jun 6 16:29 dhcp/ drwxrwxrwx 3 root other 512 Apr 11 15:42 distcc/ drwxrwxrwx 3 root other 512 May 11 10:39 eggdrop/ drwxrwxrwx 3 root other 512 Apr 9 05:50 ethereal/ drwxrwxrwx 5 root other 512 Jun 8 19:12 gawk/ drwxrwxrwx 2 root other 512 May 15 08:19 gcc/ drwxrwxrwx 4 root other 512 Jul 28 2003 ircd/ drwxrwxrwx 4 root other 512 Apr 9 05:44 libpcap/ drwxrwxrwx 5 root other 512 Jul 25 13:22 mysql/ drwxrwxrwx 3 root other 512 Mar 25 13:07 nmap/ drwxrwxrwx 3 root other 512 Nov 21 2003 ogsi-lite/ drwxrwxrwx 6 root other 512 Jul 25 13:33 perl/ drwxrwxrwx 3 root other 512 Aug 19 2003 php/ drwxrwxrwx 6 root other 512 Mar 5 15:09 ppro/ drwxrwxrwx 3 root other 512 May 15 09:02 python/ drwxrwxrwx 4 root other 512 Apr 22 06:06 razor/ drwxrwxrwx 3 root other 512 Aug 24 2003 razorsdk/ drwxrwxrwx 4 root other 512 Dec 4 2003 sendmail/ drwxrwxrwx 3 root other 512 May 23 09:37 ssh/ drwxrwxrwx 4 root other 512 May 11 10:25 tcl/ drwxrwxrwx 3 root other 512 Dec 22 2003 tcpwrappers/ drwxrwxrwx 6 root other 512 Apr 24 07:13 xmltv/ 您需要再在每一个目录中创建一个或两个结构,这取决于应用程序以及组织和配置您的单独构建的选项。创建的每一个目录将用来保存 live 应用程序(已配置和构建的应用程序版本)。您可以以两种方式进行组织:使用对应每个版本的目录,或者直接使用应用程序版本。 对应每个版本的目录:对应于应用程序每个版本的另外一层目录。对那些想要每一个版本创建很多不同构建配置的应用程序来说,这很实用。例如,您可能会创建一个名为 perl-5.9.0/debug-build 的目录,以及另一个名为 perl-5.9.0/std-build 的目录。 直接版本目录:目录中的每个子目录都是原始 tarball 所创建的。如果您在所有机器上对给定的 OS 使用相同的配置,那么您可以这样进行组织。 根据您想如何构建和部署应用程序,可以使用任意一种结构,或者两者都用。只是需要确保您知道每种情况下的结构,因为在开始部署时,您应该知道目录的规划。例如,对于 Apache,我可能要为每个版本创建三四个目录,用来保存调试的不同配置,同时还要有一些用于开发、阶段测试(staging)和产品版本的安装目录。这样得到了如清单 4 中所示的一个规划: 清单 4. 支持不同活动配置的 Apache 规划 ./httpd-2.0.46 ./httpd-2.0.46/staging-build ./httpd-2.0.46/devel-build ./httpd-2.0.46/prod-build
推荐阅读
在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ...
[详细]
蜡笔小新 2024-12-27 14:49:56
本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ...
[详细]
蜡笔小新 2024-12-27 19:31:05
网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ...
[详细]
蜡笔小新 2024-12-26 14:35:04
本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ...
[详细]
蜡笔小新 2024-12-23 20:23:57
本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ...
[详细]
蜡笔小新 2024-12-23 10:40:32
本文深入探讨了MongoDB的核心特性,包括其强大的查询语言、灵活的文档模型以及高效的索引机制。此外,还详细介绍了MongoDB的体系结构,解释了其文档、集合和数据库的层次关系,并对比了MongoDB与传统关系型数据库(如MySQL)的逻辑结构。 ...
[详细]
蜡笔小新 2024-12-20 19:23:54
2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ...
[详细]
蜡笔小新 2024-12-27 17:49:56
本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ...
[详细]
蜡笔小新 2024-12-27 17:31:41
本文详细介绍了如何解决MyBatis中常见的BindingException错误,提供了多种排查和修复方法,确保Mapper接口与XML文件的正确配置。 ...
[详细]
蜡笔小新 2024-12-25 19:42:47
在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ...
[详细]
蜡笔小新 2024-12-25 18:48:34
本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ...
[详细]
蜡笔小新 2024-12-23 19:05:02
本文介绍了由Yahoo在2009年开发并于2011年开源的BookKeeper技术。BookKeeper是一种高效且可靠的日志流存储解决方案,广泛应用于需要高性能和强数据持久性的场景。 ...
[详细]
蜡笔小新 2024-12-19 11:08:57
本文探讨了在多种编程语言中实现Hello World输出的方法,从经典的C语言到现代的JavaScript,每种语言都有其独特的表达方式。 ...
[详细]
蜡笔小新 2024-12-18 22:02:27
This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ...
[详细]
蜡笔小新 2024-12-27 19:58:25
开源项目评选最后一周,手里的5票再不用就没用了https:www.oschina.netprojecttop_cn_2020GIMP2.99.2已发布,同时这也标志着GIMP3.0的到来,其中最显著的变化是从GTK2过渡到GTK3工具包。基于 ...
[详细]
蜡笔小新 2024-12-25 00:45:27
咖啡Spring_767
这个家伙很懒,什么也没留下!