繁体   English   中英

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

[英]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%'
      }
    }
...
}

但在此之后, echo %GIT_MESSAGE% 正在重新调整:

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 将不会被识别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM