1
votes

I have a multi-project Gradle build working locally. There is a parent gradle file, build.gradle The settings.gradle file assigns the projects to their respective gradle build files:

include 'load'
include 'loadRemote' 

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

rootProject.name = 'EquipLoad'

The build.gradle parent file calls a buildAll command to build the 2 projects from the command line locally. I created a Jenkins file to build both projects. But the Jenkins pipeline does not recognize the specific project tasks. These are the tasks for the buildAll command 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
    }
}

The error in Jenkins is that it does not recognize the task project(':loadRemote').remoteLoadCleanCompileStage

How can I identify a multi-build project in Jenkins? Do I have to add the settings.gradle file?

UPDATE I thought that the different build files could not be located in the project so I added this to the settings.gradle file

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'

The error is still the same, the build.gradle file (parent) does not recognize the dependency task project(':loadRemote').remoteLoadCleanCompileStage Looking at the debug statements, the child build gradle files are found and identified: Evaluating project ':loadRemote' using build file '/var/.../loadRemote/remoteLoad_build.gradle'. The same text is shown for the load build file. Yet the tasks within these gradle build files are not recognized in the parent build.gradle file.

1
I know this was months ago ... but could you post your jenkins pipeline file? I'd like to see how you configured the scm portion of the pipeline.headsling

1 Answers

1
votes

The problem was a simple case sensitive mistake. I named the folders: Load and LoadRemote. But identified them in the gradle scripts as ':load' and ':loadRemote'. By changing the script text to ':Load' and ':LoadRemote' fixed my problem.