Home > Enterprise >  Moving Jib configuration of one module into a new module, to refactor multi-module gradle project
Moving Jib configuration of one module into a new module, to refactor multi-module gradle project

Time:09-27

I have a multi-module gradle project and one of the modules is a webapp. I added Jib configuration within the webapp build.gradle file to generate the container images. Similarly I have a few modules for command-line applications and I use Jib jar config to create container images.

I want to move the Jib specific configuration in new modules to unclutter the webapp/app build.gradle files and want achieve this by creating new modules (say ':container:tomcat', ':container:app1') and setting up a task (or something) to set Jib config here for webapp/app project. I am not sure what gradle apis I need to call to achive the same? I know I can access the webapp/app module from new module build.gradle file but not sure how to set the Jib configuration there.

Can someone please suggest how to achieve this?

CodePudding user response:

Being on Gradle, there are many ways to achieve whatever you want. One idea of mine is to create a new module (say, jibconf) for the following build.gradle.

['jib', 'jibDockerBuild', 'jibBuildTar'].each { jibTaskName ->
  task "${jibTaskName}Webapp" {
    doFirst {
      project(':webapp').jib {
        to.image = 'jib-webapp'
        // and more ....
      }
    }
    finalizedBy ":webapp:$jibTaskName"
  }

  task "${jibTaskName}App" {
    doFirst {
      project(':app').jib {
        to.image = 'jib-app'
        // and more ...
      }
    }
    finalizedBy ":app:$jibTaskName"
  }
}

Then running ./gradelw jibW or ./gradle jibDBW at the root builds a webapp image, while ./gradlew jibA or ./gradlew jibDBA builds an app image.

Note that it's recommended to register a task than outright creating it, so I'd actually do this:

  tasks.register("${jibTaskName}Webapp") { ...
  • Related