我想以某种方式获取数据version,packageName in Docker例如。我需要CI标记docker映像以供将来使用。所以有可能获得像maven这样的值mvn --batch-mode -f pom.xml help:evaluate -Dexpression=project.version。预先感谢您的帮助。
所以我build.sbt包含几个项目,现在我试图使用sbt projects,sbt inspect从SBT检查建造,但至今没有运气。
我设法从项目中获取关键值,但是现在我遇到了问题packageName in Docker。我做到了:sbt [project_name]/[key]但是因为packageName in Docker我得到了:
sbt projectName/packageName in Docker
[error] Not a valid command: in
[error] Expected 'info'
[error] Not a valid project ID: in
[error] Expected ':' (if selecting a configuration)
[error] Not a valid key: in
[error] in
[error] ^
Run Code Online (Sandbox Code Playgroud)
这是build.sbt的一部分:
lazy val `name` = project
.in(file("name"))
.dependsOn(`name-dep`)
.settings(defaults)
.settings(
packageName in Docker := "project/name",
version := "3.1.0-SNAPSHOT",
dockerExposedPorts := Seq(8080),
dockerCommands ++= Seq(
Cmd("ENTRYPOINT",
s"bin/${executableScriptName.value}",
"-l", "tcp://0.0.0.0:8081",
"-e", "${EXTERNAL_URL}",
"-c", "${CONNECTOR_URL}")
),
Run Code Online (Sandbox Code Playgroud)
对于版本,我使用:
sbt name/version
[info] Loading project definition from /home/jenkins/.jenkins/workspace/project
[info] Set current project to root (in build file:/home/jenkins/.jenkins/workspace/)
[info] 3.1.0-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
但我有问题 packageName in Docker
所以我设法通过以下方式获得这些值:
# sbt -Dsbt.log.noformat=true name/packageName | sed -n 3p | cut -d " " -f 2
name
Run Code Online (Sandbox Code Playgroud)
它不会显示整个packageName(不带project/),但是据我所知,这是一个常量,我会在CI脚本中对其进行硬编码。
和
# sbt -Dsbt.log.noformat=true name/version | sed -n 3p | cut -d " " -f 2
3.1.0-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
如果有人有更好的主意,请与我分享。
请注意,sbt我使用ASCII代码对输出进行着色,因此请像在我的解决方案中那样使用它,您必须在sbt上运行,-Dsbt.log.noformat=true否则CI可能会抱怨ENV的值,并且您不会看到此信息。
我的建议是使用sbt-native-packager。
这个打包器还获得了Docker 插件
这为您提供了 sbt 构建上的开箱即用的 docker 镜像以及版本号。我们在所有模块中都使用 sbt-package-manager。