- 有效的项目自动化是促使软件成功交付给终端用户的关键因素。构建工具的选择不应该成为软件交付中的障碍;相反,它应该提供一种灵活且可持续的方式去塑造你的自动化需求。gradle的核心功能就是提供一种易于理解且强大的工具,从端到端自动化你的项目。
- 在第一章中,我们会讨论项目自动化的好处,以及它对于可重复、可靠和便捷的方式开发和交付软件的影响。你将学习到该构建工具的基本概念和组件,以及它们是如何与Ant和Maven一起工作的。通过对比它们的优缺点,你将会看到下一代构建工具的需求。
- gradle从已有构建工具中吸取经验,取其精华,并进一步提升。第二章将会介绍gradle中那些引人注目的特性。你将了解如何安装gradle,学习如何写一个简单的构建脚本,并在命令行中运行它。
- 简单构建脚本到第2章就结束了。第三章会介绍一个真实事件中基于Java的web应用程序。你将会学习到从编译、单元测试、打包到运行该示例程序所需的全部配置。在第一部分结束时,你会对gradle的表达力和灵活性有一定的感受
项目自动化简介
本章涵盖
- 理解项目自动化的好处
- 了解不同类型的项目自动化
- 考察构建工具的特性和架构
-
探索构建工具实现的有点和缺点
- Tom和Joe以软件开发人员的身份在Acme Enterprises 公司工作,这是一家刚刚成立的公司,该公司提供一种免费的在线服务,帮助某个具体的领域中寻找最划算的交易。这家公司最近收到投资者的资金投入,目前正疯狂地朝着第一次发布前进。Tom和Joe正处在一个危急时刻。他们需要向投资者展现产品的第一个版本。两个开发人员都是有紧迫感的人,他们每天都能开发出新的特性。到目前为止,软件开发控制在规定的时间和预算之内,这让他们感到满意。首席技术官(CTO)时不时会过来拍拍他们的后背,生活非常美好,然而,手动构建和错误构建以及整个交付的过程都严重影响他们的速度。结果是,整个团队不得不忍受着零散的编译问题、构建不一致的软件工件和失败的部署。这就是引入构建工具的原因。
- 本章会给出一个简单的介绍,告诉你为什么要自动化项目,以及如何通过自动化工具做到这一点。我们会聊聊充分的项目自动化所带来的好处、项目自动化的类型和特性,以及那些能让你实现项目自动化的工具。
- 传统的面向Java的项目构建工具有两个:Ant 和 Maven 。我们会重温它们的主要特性,阅读一些构建代码,谈谈它们的缺点。最后,我们会一起讨论一个满足当代项目自动化需求的构建工具应该提供什么。
1.1没有项目自动化的生活
-
回到Tom和Joe的困境中,让我们看看为什么项目自动化是一件无须用脑的事情,不管你相信与否,许多开发人员都面临下面这些情况。原因各有不同,但是可能听起来很熟悉。
-
IDE给我们做了这些事情.
在Acme公司,开发人员在IDE中进行编码,从浏览源代码、实现新的特性、编译、重构,到运行单元测试和集成测试。当有新的代码编写出来时,他们就按一下‘编译’按钮。如果IDE告诉他们没有编译错误且测试通过,他们就会把代码提交到版本控制中,这样就可以共享代码了。IDE是一个强大的工具,但是每个开发人员第一次使用时都需要安装一个标准化的版本来执行所有的任务。这是Joe在使用新特性时学到的一课,因为他发现只能使用最新版本的编译器编译。 -
在我的机器上可以跑.
眼睛盯着滴答作响的时钟,Joe从版本控制系统中更新代码,却发现根本不能编译。似乎源代码中有个类丢失了。他问Tom,Tom也奇怪为什么在Joe的机器上不能编译代码。在经过讨论之后,Tom意识到他可能忘记提交某个类文件了,结果导致构建失败。团队的其他人员都由于这个原因而不能继续工作,直到Tom把丢失的文件提交上去。 -
代码集成简直就是个灾难.
Acem有两个不同的开发小组,其中一个组专注于构建基于web的用户界面,另一组工作于服务器后台代码。两个组的人员一起坐在Tom的机器前,运行编译整个应用程序,要构建出一个可以交付的软件,然后部署到测试环境中的一个Web服务器上。第一次欢呼声很久就结束了,因为团队发现某些功能并没有像预期的那样正常工作。某些URL根本不能被解析或者导致错误。虽然团队写了一些功能测试,但却不能定期地在IDE里工作。 -
测试过程慢得像在爬.
质量保证(QA)团队渴望立刻拿到应用程序的第一个版本。你能想象到,他们可不想测试低质量的软件。开发团队的每一次修改,他们都不得不手动地走完同样的流程。团队停止向版本控制系统中提交新的代码,一个新的软件版本从IDE中构建出来,并且将可交付软件拷贝到测试服务器上。每一次,一个开发人员都要全身心地投入到这项工作中,而不能给公司带来其他价值。在经过几周测试之后,一个成功的样例程序交付到投资者手中,QA团队说应用程序已经准备好在黄金时间上演一出好戏。 -
部署过程变成了马拉松。
从经验上看,团队知道部署一个应用的结果是不可预知的,因为存在不可预知的问题。基础设施和运行时环境必须配置好,数据库需要的种子数据必须要准备好,实际的部署需要被执行,并且需要执行初期的健康监控。当然,团队是有计划的,但是每一步都需要手动执行。
-
-
软件发布非常的成功。接下来的一周,CTO在开发人员的桌子前游荡;他已经有啦一些新的想法来提高用户体验。一个好朋友告诉他敏捷开发,一种时间控制的迭代式实现和发布软件的方法。他向团队建议两周一次的发布周期。Tom和Joe互相看着对方,两个人已经被预知的手动和重复工作吓到了。于是,他们俩想到了一起,决定自动化实现和软件交付的每一步,以此来减少构建失败、后期集成和痛苦部署的风险。
1.2项目自动化的好处
- 这个故事很清楚地说明了项目自动化对于团队成功是多么重要。如今,发布时间对于市场变得比以前更重要了。能够以一种可重复、可持续的方式构建和交付软件是关键。让我们看一看项目自动化所带来的好处。
1.2.1 防止手动介入
- 不得不手动地执行每一步去实现和交付软件是耗时且易于犯错的。坦白地说,作为一个开发人员和系统管理员,比起编译过程和拷贝文件,还有更重要的事情要做。我们都是人,难免会犯错,而且手动介入还会占用你真正做实际事情的时间。软件开发过程中的任何一步都是能够且应该被自动化的。
1.2.2 创建可重复的构建
- 软件的构建通常都有预定义和有序的步骤。比如你需要先编译源代码,然后运行测试,最后组装可交付软件。你需要每天一遍又一遍地重复运行相同的步骤。这应该和按钮一样简单。无论是谁在运行该构建,构建过程的结果应该是可重复的。
1.2.3 让构建便捷
- 你已经看到,能够在IDE中运行的构建是非常有限的。首先,你必须将特定的产品安装在机器上。其次,IDE也许只适用于某一种操作系统。一个自动化构建不应该依赖于特定的运行环境才能工作,它允许你在任何时间和任何一台想要运行构建的机器上运行。
1.3 项目自动化类型
- 在本章的开始,你看到了用户可以请求一个构建运行。用户可以是任何想要触发该构建的利益相关者,比如开发人员、测试人员或者产品拥有者。例如,我们的好朋友Tom,当他想要编译代码时,就按一下编译按钮。
按需自动化
只是项目自动化的一种类型。你可以将构建安排在某一个预定义时间触发或者某个特殊事件发生时触发。1.3.1 按需构建
- 按需构建的典型就是用户在自己的机器上触发构建,如图1.1所示。而使用版本控制系统(VCS)来管理构建定义的版本和源代码文件是一种很常见的做法。
- 在大多数情况下,用户在命令行执行一个脚本去运行预定义的有序任务——比如,编译源代码,拷贝文件从A目录到B目录,或者组装一个可交付软件。通常,这种类型的构建一天要运行多次。
1.3.2 触发构建
- 如果你正在实践敏捷开发,那么你回对一件事情感兴趣,那就是快速得到项目健康程度反馈。你会想要知道,是否源代码能够无错误地编译,是否有单元测试或集成测试失败,所以反馈软件中存在的潜在缺陷。这种类型的自动化通常是在向版本控制系统中提交代码时触发,如图1.2所示。
1.3.3 预定构建
- 预定构建是一种基于时间的程序调度方案(在UNIX操作系统背景下,也叫作定时作业)。它在特定的间隔时间或者某个具体时间运行——例如,每天凌晨1:00点,或者每隔15分钟。和所有的定时作业一样,预定义的自动化任务通常运行在一个专用的服务器上。图1.3显示的是一个预定义的构建每天凌晨5:00点运行。这种类型的构建特别适用于生成报告或者项目的文件操作。
- 实现预定义构建和触发构建的实践方式通常也叫作
持续集成(CI)
。你会在第13章学到更多关于持续集成的知识。 - 在认识了项目自动化的好处之后,是时候来讨论一下那些能让你实现这些功能的工具了。