编者按:本文源自阿里云云效团队出品的《阿里巴巴DevOps实践指南》前往:https://developer.aliyun.com/topic/devops,下载完整版电子书,了解阿里十年DevOps实践经验。
构建是将源码变成制品的过程。构建包括编译,但不等同于编译。即使对于不需要编译的解释型语言,也要构建成一个压缩包或 Docker 镜像再去部署。无论是在开发阶段还是 CICD 阶段,都离不开构建过程,构建的质量和效率对持续交付影响很大。影响构建效率的因素,包括源码以及构建的依赖。
背景
在阿里巴巴,Java 是被最多人使用的编程语言。在 Java 的构建工具中,由于迁移成本,生态等原因,Maven 一直是服务端应用的最主要构建工具。
Maven 构建性能问题主要有二方面原因。一是外因,从应用角度看,一些 Java 应用历史悠久,依赖不断增加,并因为清理有风险导致累积太多,典型应用有 3000 个 Jar 包依赖,而且这些应用研发人员多,且是跨团队的,导致依赖管理成本高,依赖变得复杂混乱。二是内因,从 Maven 本身来看,它对复杂依赖的处理考虑欠妥。
对于外因,需要业务团队建立依赖梳理管理机制。针对内因,我们对 Maven 进行了重新实现,推出了 AMaven。
另一方面,阿里巴巴有 15%的 C/C++应用。C/C++应用与 Java 的最大区别是:Java 应用构建次数频繁,但每次构建时间短;C/C++应用构建次数少,但一次构建时间长。如某些软件的构建长达 10 多个小时。所以C/C++开发同学的痛点,除了