如何仅在 Jenkins 上为一个子模块执行包?
Posted
技术标签:
【中文标题】如何仅在 Jenkins 上为一个子模块执行包?【英文标题】:How to execute package for one submodule only on Jenkins? 【发布时间】:2013-08-07 04:51:30 【问题描述】:我有一个包含 4 个模块的 sbt 项目:module-a
、module-b
、module-c
、module-d
。
每个模块都可以打包成一个WAR。我想在 Jenkins 上设置一个部署,只构建 4 个模块中的一个并将其部署到容器中。
详细来说,我想要 4 个 Jenkins 工作 - job-a
、job-b
、job-c
、job-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】:
您可能还希望执行项目范围的clean
和test
任务,如下所示:
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 上为一个子模块执行包?的主要内容,如果未能解决你的问题,请参考以下文章
分布式项目中maven互相依赖,如何修改其他项目的jar包?
是否可以添加检查所有子模块是否具有与父 pom 中定义的相同版本?