如何仅在 Jenkins 上为一个子模块执行包?

Posted

技术标签:

【中文标题】如何仅在 Jenkins 上为一个子模块执行包?【英文标题】:How to execute package for one submodule only on Jenkins? 【发布时间】:2013-08-07 04:51:30 【问题描述】:

我有一个包含 4 个模块的 sbt 项目:module-amodule-bmodule-cmodule-d

每个模块都可以打包成一个WAR。我想在 Jenkins 上设置一个部署,只构建 4 个模块中的一个并将其部署到容器中。

详细来说,我想要 4 个 Jenkins 工作 - job-ajob-bjob-cjob-d,每个只构建定义的模块(a 到 d)。

目前,我使用 clean update test package 作为 Jenkins sbt 构建的命令,但这会导致打包所有 4 个不必要的模块。

我已经尝试过project -module-a clean update test package,但没有成功。

【问题讨论】:

您能描述一下在更改为项目时有哪些特别不起作用的地方吗? 它可以工作,但它仍然打包所有模块而不是只打包一个。 “./sbt project -module-a clean update test package” - 这是我在jenkins中尝试过的命令 引用project 的参数并且不要使用破折号:./sbt "project module-a" clean update test 谢谢!有用! - 你能添加一个答案让我接受吗? 【参考方案1】:

您可能还希望执行项目范围的cleantest 任务,如下所示:

sbt module-a/clean module-a/test

对于以下命令适用于什么项目,该解决方案略短且清晰。

您不需要执行update 任务,因为它由test 隐式执行,如inspect tree test 中所述。

有一种方法可以使用别名使其更简洁。在build.sbt 中使用以下内容:

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

使用别名,执行jenkinsJob4ModuleA,效果与上述方案相同。

【讨论】:

【参考方案2】:

引用项目的参数,即project module-a,并且不要在子模块的名称前使用破折号。

Jenkins 作业的整个命令行如下所示:

./sbt "project module-a" clean update test

【讨论】:

我希望这里的 shell 和批处理模式有一致性。

以上是关于如何仅在 Jenkins 上为一个子模块执行包?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Eclipse 上的包中制作子包?

分布式项目中maven互相依赖,如何修改其他项目的jar包?

如何从不同的子模块导入一个子模块? [复制]

是否可以添加检查所有子模块是否具有与父 pom 中定义的相同版本?

Swift:如何使滚动视图执行子视图控制器 viewDidLoad

使用 git 子模块恢复 Nuget 包