使用bat(Windows)并使用Pipeline通过Jenkins将提交消息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:.jenkinsworkspacefolder 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。

最新更新