smg*_*e99 5 gradle jenkins build-pipeline continuous-delivery
以这个基本的构建管道(带有 gradle 任务)为例:
根据 Jez Humble 的“Continuous Delivery”一书,您应该只构建一次二进制文件。所以在上面的理论管道中,在第 1 步中我们清理、编译和构建 WAR,在第 2 步中我们运行集成测试(使用第 1 步中编译的代码),在第 3 步中我们运行验收测试(使用编译后的代码)步骤 1 中的代码),并在步骤 4 中部署 WAR(在步骤 1 中构建)。到现在为止还挺好。
我正在尝试在 Jenkins 中实现这个管道。因为每个作业都有自己的工作区,所以第 2、3 和 4 步最终会重新编译代码并构建 WAR,这违反了只构建一次二进制文件的“持续交付”准则。
为了解决这个问题,我使用了“克隆工作区 SCM ”Jenkins 插件,它将从第一个构建中压缩工作区,并成为构建 2、3 和 4 的工作区源。但是,gradle 仍然重新编译每个构建中的代码步骤,因为它显然使用文件的绝对路径来确定是否需要执行任务。由于插件将文件移动到了新的工作空间,因此绝对路径发生了变化,这让 gradle 认为它需要从头开始而不是执行增量构建。
现在我们可以在 Jenkins 中共享工作区,但由于可能有两个作业针对共享工作区运行,因此这也令人不悦。
那么如何在坚持持续交付、Jenkins 和 Gradle 的最佳实践的同时,使用 Jenkins 和 Gradle 实现上述管道呢?
| 归档时间: |
|
| 查看次数: |
3416 次 |
| 最近记录: |