![](/img/trans.png)
[英]How to use groovy env. variable in Jenkins to pass through bat command in Jenkins pipeline
[英]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.