【发布时间】:2016-05-19 02:35:44
【问题描述】:
我想以某种方式获取version、packageName in Docker 等数据。我的 CI 需要它来标记 docker 映像以供将来使用。
那么是否有可能获得像 maven mvn --batch-mode -f pom.xml help:evaluate -Dexpression=project.version 这样的值。
提前感谢您的帮助。
所以我的 build.sbt 包含几个项目,现在我正在尝试使用来自 sbt inspect build 的 sbt projects,sbt 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
如果有人有更好的想法,请与我分享。
提示
请注意 sbt i 使用 ASCII 代码对输出进行着色,因此您可以像在我的解决方案中一样使用它,您必须使用 -Dsbt.log.noformat=true 运行 sbt,否则您的 CI 可能会抱怨 ENV 的值而您不会看到这一点。
【问题讨论】: