通过Jenkins和batWindows并使用管道将提交消息的strng值保存在环境变量中吗?

问题描述

我想将某些字符串的值(在本例中为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%正在重新显示

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

很自然,如果我使用bat'%GIT_MESSAGE%'运行它,它将失败。我知道答案的一部分可能在于将环境变量传递给蝙蝠脚本$ {%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。