Earthly是一个现代化的构建工具,用来完成容器镜像构建,和提供类似Makefile的源代码构建功能,如官方文档所说的it's like Dockerfile and Makefile had a baby是Dockerfile和Makefile的孩子。
学习并掌握一个CI工具不那么容易,需要补充大量新的知识,Earthly几乎不需要有什么太多的新知识就能掌握,使用非常容易。如果你对Dockerfile和Makefile有一定的了解(尤其是Dockerfile),就能很快的学习并掌握Earthly的语法, Earthly语法和dockerfile的大部分语法是兼容的,只有细小的差别。
Earthly是基于buildkit开发的,充分利用了buildkit强大的缓存效率和构建效率,支持大规模群集构建,Earthly团队对buildkit项目fork并做了定制化的开发。
Earthly利用antlr4库(语言识别工具)构建自己的语法(领域语言)然后将自定义语法转换为buildkit llb,进而完成构建过程的执行。
Earthly借鉴了dockerfile理念和语法,但是做了大量的扩展, 如支持if判断,这就很强大了,并且内部支持docker命令的执行,用来启动内部服务(如用docker启动redis)供CI流程使用。
CI工具调试非常麻烦,为了完成调试要不停的推代码来触发进行各种尝试,这个过程让人心烦气躁,相信很人都有过这样的经历,Earthly可以方便的本地手动触发相对方便。
Earthly提供了强大的debug模式,可以通过添加--interactive参数,当run命令报错,直接进入容器命令行来直接调试,这是Earthly的一个杀手锏。
Earthly是一个很新的项目,2020年初才启动,但是开发活跃,上升趋势也很快,从我第一次关注Earthly在github两千五百多star,到现在将近四千多star只用了一个月左右的时间。
Earthly并不具备完整的CI/CD能力, 但是他可以作为中间件,和成熟的CI/CD工具集成(如jinkens drone CI),形成完整的工具链,Earthly另一个好处是可以更好的完成和不同CI/CD工具集成,并可以实现无痛迁移。
Earthly为CI的实现提供了另一个选择Earthly并不是针对某种开发语言开发工具的构建框架,而是提供了一个通用的、隔离的容器沙盒环境集成流程,可以和任何的语言、开发工具、特定构建框架集成,如java的MVN, ruby的bundle等。
本人基于Earthly实现了了一个基于drone CI的runner——drone-runner-earthly ,欢迎大家围观。