持续交付(CD)的核心原则之一是,测试需要在“类似生产”的环境中运行,以保证发布版本的稳定性。类似相同的环境可以减少“在我的机器上可以运行”之类的问题,并能轻松地在本地复现问题。我们可以避免由于平台差异引起的bug,比如证书丢失或过期。
Docker是实现这种对等性的最佳工具之一。它还允许我们将构建与Jenkins基础设施分离。比如,使用基于Docker的构建,我们无需担心预先安装在Jenkins代理上的Java版本。无论代理上安装了什么,构建都将使用我们指定的版本运行。尝试新的JVM版本如同变更Docker标签一样容易,可以让我们走地更快。
在本文中,我们将要学习如何使用Docker配置Jenkins,来确保构建环境与生产环境是相同的。我们还将学习如何通过在构建过程中共享缓存数据,来保持最小的构建时间。
Java构建的简单概述
首先,从预先安装了Docker的Jenkins代理开始构建。该代理通过签出源代码编译的方式获取,并在预先安装了JDK的Docker容器中运行测试。然后,富JAR将在生产环境中运行在一个Docker镜像,该镜像具有和构建时相同的Java版本。
不幸的是,我们需要考虑很多细节才能解决这个问题。下面我们将深入地讨论这些细节。
使用Docker构建的详细指南
首先,需要预先安装一个带有Docker二进制文件的Jenkins代理。因为这是唯一的要求,所以这个代理可以在整个公司内共享,没有必要为每个团队都构建自己的代理。在本例中,klarna-jenkins-agent是附带了Docker的通用代理。它还有一个ID为11000的Jenkins用户,该用户属于ID为12000的Docker组。