首页 > 解决方案 > 使用多项目 gradle 构建创建 Jenkins 管道

问题描述

我有一个在本地工作的多项目 Gradle 构建。有一个父 gradle 文件, build.gradle 的 settings.gradle 文件将项目分配给它们各自的 gradle 构建文件:

include 'load'
include 'loadRemote' 

project(':loadRemote').buildFileName = 'remoteLoad_build.gradle'
project(':load').buildFileName = 'load_build.gradle' 

rootProject.name = 'EquipLoad'

build.gradle 父文件调用buildAll命令在本地从命令行构建 2 个项目。我创建了一个 Jenkins 文件来构建这两个项目。但 Jenkins 流水线不识别具体的项目任务。这些是buildAll命令 gradle.projectsEvaluated {

    task compileAll (dependsOn: [project(':loadRemote').remoteLoadCleanCompileStage]) {
         compileAll.finalizedBy project(':load').loadCleanCompileStage
    }

    task packageAll (dependsOn: [project(':loadRemote').remoteLoadPackage]) {
        packageAll.finalizedBy project(':load').loadPackage
    }

    task buildAll (dependsOn: [compileAll]) {
        buildAll.finalizedBy packageAll
    }
}

Jenkins中的错误是它不识别任务project(':loadRemote').remoteLoadCleanCompileStage

如何在 Jenkins 中识别多构建项目?我必须添加 settings.gradle 文件吗?

更新 我认为不同的构建文件不能位于项目中,所以我将它添加到 settings.gradle 文件中

rootProject.name = 'EquipLoad'

include 'load'
project(':load').projectDir = new File(settingsDir, rootProject.rootDir.getAbsolutePath() + "/Load")
project(':load').buildFileName = 'load_build.gradle'

include 'loadRemote' 
project(':loadRemote').projectDir = new File(settingsDir, rootProject.rootDir.getAbsolutePath() + "/LoadRemote")
project(':loadRemote').buildFileName = 'remoteLoad_build.gradle'

报错还是一样,build.gradle文件(父级)不识别依赖任务project(':loadRemote').remoteLoadCleanCompileStage 查看调试语句,发现并识别出子构建gradle文件: Evaluating project ':loadRemote' using build file '/var/ .../loadRemote/remoteLoad_build.gradle'。加载构建文件显示相同的文本。然而,这些 gradle 构建文件中的任务在父 build.gradle 文件中无法识别。

标签: jenkinsgradle

解决方案


问题是一个简单的区分大小写的错误。我将文件夹命名为:Load 和 LoadRemote。但在 gradle 脚本中将它们标识为 ':load' 和 ':loadRemote'。通过将脚本文本更改为 ':Load' 和 ':LoadRemote' 解决了我的问题。


推荐阅读