10

I have a sbt project with 4 modules: module-a, module-b, module-c, module-d.

Each module can be packaged as a WAR. I want to set up a deployment on Jenkins that would build only one of the 4 modules and deploy it to a container.

In detail, I want to have 4 Jenkins jobs - job-a, job-b, job-c, job-d, each building only the defined module (a to d).

For now, I am using clean update test package as the command for the Jenkins sbt build, but this results in packaging all 4 modules that is not necessary.

I already tried project -module-a clean update test package but with no luck.

Jacek Laskowski
  • 72,696
  • 27
  • 242
  • 420
Alebon
  • 1,189
  • 2
  • 11
  • 24

2 Answers2

16

You may also like to execute project-scoped clean and test tasks as follows:

sbt module-a/clean module-a/test

The solution is slightly shorter and clearer as to what project the following commands apply to.

You don't need to execute update task since it's implicitly executed by test as described in inspect tree test.

There's a way to make it cleaner with an alias. Use the following in the build.sbt:

addCommandAlias("jenkinsJob4ModuleA", "; module-a/clean; module-a/test")

With the alias, execute jenkinsJob4ModuleA to have the same effect as the above solution.

Jacek Laskowski
  • 72,696
  • 27
  • 242
  • 420
6

Quote the argument to project, i.e. project module-a, and don't use a dash before the name of the submodule.

The entire command line for the Jenkins job would than be as follows:

./sbt "project module-a" clean update test
Jacek Laskowski
  • 72,696
  • 27
  • 242
  • 420
Alebon
  • 1,189
  • 2
  • 11
  • 24