Jenkins使用增量渐变构建构建管道

Jenkins使用增量渐变构建构建管道,jenkins,gradle,continuous-delivery,build-pipeline,Jenkins,Gradle,Continuous Delivery,Build Pipeline,以这个基本构建管道为例(带渐变任务): 编译/运行单元测试(gradle clean build) 集成测试(梯度集成测试) 验收测试(梯度验收测试) 部署(gradle myCustomDeployTask) 根据Jez Humble的《持续交付》一书,您应该只构建一次二进制文件。因此,在上面的理论管道中,在步骤1中,我们清理、编译和构建WAR,在步骤2中,我们运行集成测试(使用步骤1中编译的代码),在步骤3中,我们运行验收测试(使用步骤1中编译的代码),在步骤4中,我们部署WAR(在步骤1中

以这个基本构建管道为例(带渐变任务):

  • 编译/运行单元测试(gradle clean build)
  • 集成测试(梯度集成测试)
  • 验收测试(梯度验收测试)
  • 部署(gradle myCustomDeployTask)
  • 根据Jez Humble的《持续交付》一书,您应该只构建一次二进制文件。因此,在上面的理论管道中,在步骤1中,我们清理、编译和构建WAR,在步骤2中,我们运行集成测试(使用步骤1中编译的代码),在步骤3中,我们运行验收测试(使用步骤1中编译的代码),在步骤4中,我们部署WAR(在步骤1中构建)。到目前为止还不错

    我正试图在詹金斯实施这条管道。因为每个作业都有自己的工作区,所以步骤2、3和4最终会重新编译代码并构建WAR,这违反了只构建一次二进制文件的“持续交付”原则

    为了解决这个问题,我使用了“”Jenkins插件,它将从第一个构建开始压缩工作区,并成为构建2、3和4的工作区源。但是,gradle仍然在每个步骤中重新编译代码,因为。由于插件将文件移动到了一个新的工作区,所以绝对路径发生了变化,这使得gradle认为它需要从头开始,而不是执行增量构建

    现在我们可以在Jenkins中共享工作区,但这也不受欢迎,因为可能有两个作业在共享工作区上运行


    那么,在坚持连续交付、Jenkins和Gradle的最佳实践的同时,如何使用Jenkins和Gradle实现上述管道呢?

    首先要确保后面的目标(integrationTest等)不依赖于编译。接下来,将第一个作业中生成的war文件作为jenkins工件发布。然后使用类似的方法将war文件复制到目标工作区。

    我还没有尝试过,但您可以尝试将以下内容添加到项目中:

    build.onlyIf { ! Boolean.getBoolean('skip.build') }
    
    使用
    -Dskip.build=true
    参数运行gradle,构建任务将被跳过

    看看gradle文档中的

    这与本文中的答案类似
    问题。

    但integrationTest是一项测试任务,测试任务取决于编译。Bagheera的观点也是正确的。gradle integrationTest-x build-x clean考虑到各种情况,这是一个有效的答案,但是如果
    gradle compile
    任务在Artifactory中查找Jar,并且只有在找不到Jar时才编译代码,那不是很好吗?嗨,你能发布这个问题的最终解决方案吗?