通过 Jenkins 使用 bat (Windows) 并使用管道将提交消息字符串值保存在环境变量中?

Save commit message strng value in an envionment variable via Jenkins with bat (Windows) and using Pipeline?

我想将一些字符串的值(在本例中是来自 Git 的提交消息)保存为 Jenkins 中多分支管道的环境变量。这是我的管道的一部分:

pipeline {
  agent any
  environment {
        GIT_MESSAGE = """${bat(
            script: 'git log --no-walk --format=format:%s ${%GIT_COMMIT%}', 
            returnStdout: true
            )}""".trim()
    }
  stages {
      stage('Environment A'){
      steps{
        bat 'echo %GIT_MESSAGE%'
        bat '%GIT_MESSAGE%'
      }
    }
...
}

但在此之后,回显 %GIT_MESSAGE% 是 ret运行ing:

echo D:\.jenkins\workspace\folder log --no-walk --format=format:GIT_COMMIT}  1>git

当然,如果我 运行 使用 bat '%GIT_MESSAGE%' 它会失败。我知道部分答案可能在于将环境变量传递给 bat 脚本 ${%GIT_COMMIT%} 但我似乎无法弄清楚如何。

有什么想法吗?

我刚刚解决了这个问题。它与 groovy 执行字符串插值的方式有关。我让它使用单行字符串(即“...”),但我很确定它应该使用多行字符串(“””...“”)。 这是目前可行的解决方案:

pipeline {
  agent any
  environment {
        GIT_MESSAGE = "${bat(script: "git log --no-walk --format=format:%%s ${GIT_COMMIT}", returnStdout: true)}".readLines().drop(2).join(" ")
    }
  stages {
      stage('Environment A'){
      steps{
        bat 'echo %GIT_MESSAGE%'
        bat '%GIT_MESSAGE%'
      }
    }
...
}

请注意 readLines()drop(2)join(" ") 在必要时为了只获取提交消息而没有命令来自的路径 运行。 在 bat 函数的脚本参数中使用“...”也很重要,否则不会发生插值并且环境变量 GIT_COMMIT 将无法识别。