CI的另一种选择——Earthly入门介绍

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 ,欢迎大家围观。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容