DevOps实践-Gradle使用小结

简介: Gradle是CI过程工具,而不是系统。

DevOps实践系列文章,请参见连接。

概述

Gradle是CI过程工具,而不是系统。持续集成过程中的构建、自动化测试、打包、发布都可以使用Gradle来完成。而持续进程过程为我们降低各方面成本,提高产品信心,提高产品质量有着非常重要的作用(不要问我为啥)。而我们很多研发人员非常讨厌CI过程,这一点的问题原因是研发人员没有从CI过程中获取任何利益,而且还增加了维护成本。关于这一点等有机会的时候和大家讨论一下《怎么统一研发,质量,测试,管理之间的利益》(统一各方面的利益之后众志成城,万众一心,我们的产品会更上一层楼)。

使用总结:

在使用Gradle过程中发现在Gradle中的很多特性,很多原理都很特别。这里说明几个使用实践。(这里不与makefile,maven,ant进行对比)

  • 关于Gradle的执行的过程:

很多介绍Gradle的地方,都说Gradle脚本是一种配置脚本。他们说这句话的原因是因为在Gradle中提供了很多插件,启用插件后直接调用方法闭包进行配置就可以完全完成项目需要的功能。所以,Gradle很多时候都是以配置文件的形式存在的。

但,Gradle的脚本不简单是配置文件。从Gradle执行的三个步骤可以看出:
1> Initialization:Gradle 支持单项目或者多项目构建,在该阶段,Gradle认哪些项目会参与构建,然后为每一个项目创建 Project 对象
2> Configuration:这个阶段就是配置 Initialization 阶段创建的 Project 对象,所有的配置脚本都会被执行
3> Execution:这个阶段 Gradle 会确认哪些在 Configuration 阶段创建和配置的 Task 会被执行,哪些 Task会被执行取决于gradle命令的参数以及当前的目录,确认之后便会执行

大家可以从Gradle执行过程得出,Gradle的使用过程不止配置脚本那么简单。具体可以看:
1> 在初始化阶段,Gradle没有指定默认的初始化脚本,必须使用Gradle的命令行参数进行指定。这个过程可以使用Gradle的Hook来完成相应的回调注册,以控制整个Gradle执行过程。

参见:https://docs.gradle.org/current/userguide/init_scripts.html
https://docs.gradle.org/current/dsl/org.gradle.api.invocation.Gradle.html#org.gradle.api.invocation.Gradle:addListener(java.lang.Object))

2> 在配置阶段,执行的是相关的配置。比如说Project中的依赖管理闭包块。属性设置等都会直接执行。但是这个阶段不会执行task内部的action。所以,这个阶段才叫做配置阶段。

3> 在执行阶段,会执行task的相关操作。在相对复杂的项目中很多时候需要在执行阶段对项目构建进行动态配置,在这个阶段可以对项目中各种属性在进行配置。但是,动态配置过程必须在使用这些配置之前完成,要不也没有任何用处。

所以,从上面可以得出,Gradle的执行过程不像我们之前接触过的CI工具那样要不是纯配置,要不是纯动态。这一点是Gradle很大的特点。这种方式为我们很好的融合了配置 与 动态构建过程,平衡了两方的优缺点。

  • Gradle配置过程

在脚本执行的时候,Gradle会配置一些特定类型的对象,这些对象就被称为脚本的 delegate 对象,也是构建领域的领域对象,下文简称 DO。
DO 的意义就在于脚本可以使用被代理的对象的方法——这一点非常重要,是脚本中可调用方法的重要来源。
参见:https://www.muzileecoding.com/gradlestudy/gradle-advaced-do.html

只要是被委托对象有的方法,都是可以直接调用的。而且还有一个比较复杂的方法查找过程,一层层的查找方法。所以,在查找在某一部分可以使用的方法是一个比较麻烦的过程。而在Gradle中的文档又写的很晦涩会导致学习成本提升,效率降低等问题。不过一般情况下直接查找DSL相关描述即可。

  • Gradle脚本模块化

模块化过程分两个大类:配置模块化 和 过程模块化。
配置模块化是将Gradle的脚本分模块的写道不同的脚本下,来提高Gradle脚本的可读性与可维护性。具体方法:

apply from: 'other.gradle'

使用apply来引入其他的脚本,但是,在真正使用过程中发现被引入的脚本的委托对象好像不像一般脚本那样。不能直接使用Project一些特定的属性或者task,只能在主脚本中通过不同的方式进行调用。

过程模块化是在被引入脚本中实现过程,方法,类等等,但是需要在主脚本里进行调用。这种方法可以使用Gradle直接调用groovy脚本中的实现来完成,但是,没有找到方法来使Gradle脚本调用groovy脚本。所以,这里的过程模块化还是使用配置模块化来进行引入。不过使用特殊的方式进行方法,类的导出。具体如下:

// Define methods as usual
def commonMethod1(param){ return true }
def commonMethod2(param){ return true } // Export methods by turning them into closures
ext{
commonMethod1 = this.&commonMethod1
otherNameForMethod2 = this.&commonMethod2
}

在被引入脚本中使用ext进行导出,在主脚本中就可以正常使用了。

参见:http://stackoverflow.com/questions/18715137/extract-common-methods-from-gradle-build-script
https://docs.gradle.org/current/userguide/organizing_build_logic.html#sec:configuring_using_external_script

  • 关于Groovy

在Gradle脚本中可以使用任意合法的Groovy语句。从Groovy的文档可以了解到Groovy是一种可以在运行期和编译器进行元编程的强大语言。元编程又是DSL的强大支撑。所以,Gradle才实现了这么强大的DSL,让我们更容易理解Gradle。
参见:http://www.groovy-lang.org/metaprogramming.html

总结:

总结了一些Gradle的实践,但是,这里最主要的核心内容还是怎么提高程序的可理解性,可维护性,可测试性的内容。提高这些更是为了降低成本。

目录
相关文章
|
1月前
|
运维 Devops 持续交付
DevOps实践:持续集成与持续部署的黄金法则
在软件工程领域,DevOps作为一种文化和实践的集合,旨在加强开发(Dev)与运维(Ops)之间的协作与整合。本文深入探讨了持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)的概念、重要性以及实施策略,同时结合真实案例分析其在实际运维工作中的应用效果。文章旨在为读者提供一套系统的方法论,以实现软件开发流程的自动化、效率提升及风险降低。 【7月更文挑战第17天】
|
27天前
|
运维 监控 Devops
DevOps实践:持续集成与持续部署的黄金路径
在数字化时代,快速迭代和高质量软件交付成为企业竞争的核心。本文深入探讨了DevOps文化下,持续集成(CI)与持续部署(CD)的最佳实践,旨在为读者提供一套实现高效、自动化的软件发布流程的方法论。通过分析现代软件开发的挑战,结合具体案例,本文详细阐述了如何构建一个灵活、高效的CI/CD流水线,以及如何利用监控和反馈机制不断优化这一过程。文章不仅适合运维人员阅读,同时也为软件开发者和项目经理提供了宝贵的参考。
|
6天前
|
运维 监控 Devops
DevOps实践之路:从理论到现实
本文将深入浅出地探讨DevOps的核心概念、实施步骤及面临的挑战,通过实际案例分析,展示如何将DevOps理念融入日常运维工作,提升软件开发与运维效率。文章旨在为读者提供一条清晰的DevOps实践路径,帮助团队实现更快的交付周期和更高的产品质量。
|
7天前
|
运维 监控 Devops
构建高效自动化运维体系:DevOps与容器化实践
【7月更文挑战第44天】在现代IT基础设施管理中,自动化运维已成为提升效率、降低成本、确保系统稳定性的关键。本文将探讨如何通过结合DevOps理念和容器化技术来构建一个高效的自动化运维体系。我们将分析这一体系对提高软件交付速度、优化资源利用率以及增强系统可靠性的积极影响,并提供一系列实施策略和最佳实践,帮助企业实现运维自动化转型。
|
7天前
|
运维 Devops 持续交付
DevOps实践之路:从理论到企业级应用
在数字化浪潮中,DevOps作为一种提升软件开发和运维效率的方法论,正被越来越多的企业采纳。本文通过探讨DevOps的核心理念、关键实践以及在不同规模企业中的应用案例,旨在为读者提供一条清晰的DevOps实践之路。无论你是初涉这一领域的新手,还是寻求进阶的资深人士,这篇文章都将为你打开一扇洞悉DevOps精髓的大门。
19 2
|
7天前
|
运维 监控 Devops
DevOps实践:持续集成与持续部署(CI/CD)的精髓
在软件工程的海洋里,DevOps如同一艘高效的船只,而持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)则是推动这艘船前行的强大双桨。本文将深入探索CI/CD的核心概念,揭示其如何助力团队高效协同、提升软件质量和加速产品上市。
25 1
|
10天前
|
运维 监控 Devops
DevOps实践之旅:从混乱到秩序的转变
在软件开发的世界里,DevOps不仅仅是一个流行词,它是文化、实践和工具的集合体,旨在缩短系统开发生命周期,同时提供高质量的软件持续交付。本文将带你领略DevOps如何从概念走向实践,转变传统运维模式,提升团队协作效率,实现快速迭代与高可靠性的平衡艺术。
|
14天前
|
Kubernetes Devops 测试技术
DevOps实践:持续集成和持续部署(CI/CD)在现代企业中的应用
随着软件开发行业的迅猛发展,DevOps文化及其核心实践—持续集成(Continuous Integration, CI)与持续部署(Continuous Deployment, CD)—已成为提升软件交付速度和质量的关键策略。本文将深入探讨CI/CD的理论基础,并结合真实案例分析其在现代企业中的实际应用效果,旨在为读者提供一套可行的实施指南。
|
20天前
|
监控 Devops 测试技术
DevOps实践:从持续集成到自动化部署的旅程
【7月更文挑战第31天】在软件开发领域,DevOps已经成为一种文化和实践,旨在通过改进开发和运维之间的协作,来加速软件交付和提高质量。本文将深入探讨DevOps的核心概念,包括持续集成(CI)、持续交付(CD)以及自动化部署,并分享实施这些实践的具体步骤和技巧,帮助读者构建更加高效、可靠的软件发布流程。
44 1
|
27天前
|
机器学习/深度学习 运维 监控
DevOps实践:从自动化部署到性能监控的全面解析
在当今快速发展的软件行业中,DevOps已经成为提升效率和质量的关键。本文将深入探讨DevOps的核心概念、实施步骤及其带来的益处,同时通过实际案例分析展示如何成功实施DevOps流程,并讨论面临的挑战及未来发展趋势。