如何在命令行中从build.sbt中提取数据

时间:2016-02-09 07:44:28

标签: scala sbt

我想获得像versionpackageName in Docker这样的数据。我需要它为我的CI标记泊坞窗图像以供将来使用。 那么有没有可能获得像maven mvn --batch-mode -f pom.xml help:evaluate -Dexpression=project.version这样的值。 提前感谢您的帮助。

所以我的build.sbt包含几个项目,现在我正在尝试使用来自sbt inspect buildsbt projectssbt inspect,但到目前为止还没有运气。

我设法从项目中获取了关键值,但现在我遇到了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]   ^

这是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}")
    ),

对于我使用的版本:

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

但我遇到packageName in Docker

的问题

我的解决方案:

所以我设法通过以下方式获取这些值:

# sbt -Dsbt.log.noformat=true name/packageName | sed -n 3p | cut -d " " -f 2
name

它显示整个packageName(没有project/)但是因为我知道这是一个常量我将在CI脚本中对其进行硬编码。

# sbt -Dsbt.log.noformat=true name/version | sed -n 3p | cut -d " " -f 2
3.1.0-SNAPSHOT
如果有人有更好的想法,请与我分享。

提示

请注意,我使用ASCII代码对输出进行着色,以便在我的解决方案中使用它,你必须使用-Dsbt.log.noformat=true运行sbt,否则你的CI会抱怨ENV的值,你不会看到此

1 个答案:

答案 0 :(得分:1)

我的建议是使用sbt-native-packager

此打包者也获得了Docker Plugin

这为您提供了带有版本号的sbt版本的开箱即用码头图片。我们在所有模块中使用sbt-package-manager。