【问题标题】:How to add commit hash to Play templates?如何将提交哈希添加到 Play 模板?
【发布时间】:2014-08-03 04:41:40
【问题描述】:

我想将提交哈希放入 Play Framework 模板文件中,以便我可以通过 REST GET 调用查看构建信息。

在 sbt 中我可以获得一个 git commit hash 和 git 分支名称,在构建过程中是否可以将这些信息放入模板文件中?

build.sbt

name := "my-project"

val branch = "git rev-parse --abbrev-ref HEAD".!!.trim
val commit = "git rev-parse HEAD".!!.trim
val buildTime = (new java.text.SimpleDateFormat("yyyyMMdd-HHmmss")).format(new java.util.Date())

version := "%s-%s-%s".format(branch, commit, buildTime)

【问题讨论】:

标签: playframework sbt playframework-2.1 playframework-2.2


【解决方案1】:

我使用了一个名为 sbt-buildinfo 的 sbt 插件来执行此操作。请参阅Does sbt have something like gradle's processResources task with ReplaceTokens support? 的答案。从技术上讲,它奏效了。实际上,每次发生任何变化时,Play 都会重新加载整个项目。也许他们现在已经克服了这个问题?试试 sbt-buildinfo:https://github.com/sbt/sbt-buildinfo#usage

使用示例:

lazy val root = (project in file("."))
  .enablePlugins(BuildInfoPlugin)
  .settings(
    buildInfoKeys := Seq[BuildInfoKey](
      <whateverYouWant>,
      BuildInfoKey.action("commit") {
        scala.sys.process.Process("git rev-parse HEAD").!!.trim
      }
    )
  )

【讨论】:

  • 如果可以稍微扩展以包含一些代码,那就太好了。我还不清楚如何使用 buildinfo 来做到这一点(来自自述文件)。
  • 使用最新的 sbt (1.0.2) 我得到:error: value !! is not a member of String
  • 请注意,iiuc,Andy Hayden 的言论在随后的编辑中得到解决。这对我来说是 1.6.1。
【解决方案2】:

添加我丑陋的解决方案来添加 git head hash 来构建:
(除了 Bob Kuhar 的回答中的链接)
我已经有了“lazy val root”,所以这就是现在的样子。

lazy val root = (project in file(".")).
  enablePlugins(PlayScala).
  enablePlugins(BuildInfoPlugin).
  settings(
    buildInfoKeys := Seq[BuildInfoKey](
      name, version, scalaVersion, sbtVersion,
      "hostname" -> java.net.InetAddress.getLocalHost().getHostName(),
      "whoami" -> System.getProperty("user.name"),
      "buildTimestamp" -> new java.util.Date(System.currentTimeMillis()),      
      "gitHash" -> new java.lang.Object(){
              override def toString(): String = {
                      try { 
                    val extracted = new java.io.InputStreamReader(
                              java.lang.Runtime.getRuntime().exec("git rev-parse HEAD").getInputStream())                         
                    (new java.io.BufferedReader(extracted)).readLine()
                      } catch {      case t: Throwable => "get git hash failed"    }
              }}.toString()
    ),
    buildInfoPackage := "buildpkg"
  )

【讨论】:

    猜你喜欢
    • 2022-10-19
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 2012-09-03
    相关资源
    最近更新 更多