从Jenkins Pipeline中捕获Shell脚本输出

3

我正在尝试在Jenkinsfile中提取git分支和提交信息,如下所示:

def commit = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()
def branch = sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()

我试图以这种方式后续打印:

println("Branch: ${branch}, Commit: ${commit}")

我没有得到真实的值,只留下了这个:

Branch: org.jenkinsci.plugins.pipeline.modeldefinition.ClosureModelTranslator@545511bf, Commit: org.jenkinsci.plugins.pipeline.modeldefinition.ClosureModelTranslator@545511bf

我是否有做错的地方,如何正确获取我需要的值?请注意:我已经知道用于检索所需信息的shell命令。我的问题是将信息作为“ClosureModelTranslator”而不是“String”传递给我。

可能是Jenkins工作流检出访问BRANCH_NAME和GIT_COMMIT的重复问题。 - burnettk
如果你真的关心阅读你声称是重复的帖子,你会注意到它实际上不是重复的@KevinBurnett。 - ioreskovic
如果您执行 sh 'git rev-parse HEAD > commit'; def commit = readFile('commit').trim(),是否会得到相同的错误结果? - burnettk
你所提到的是在“returnStdout”实现之前使用的一种黑客技巧。我宁愿不在我的磁盘上创建和读取不必要的文件来获取提交。我的问题针对的是一个特定的方法,而不是以前使用的解决方法。我知道你想帮忙,但很遗憾,你并没有。 - ioreskovic
是的,回答你的问题,结果与我的问题相同。 - ioreskovic
显示剩余2条评论
1个回答

9

这个完整的流水线对你来说是否有效?使用Pipeline插件2.4对我有效。

pipeline {
  agent { label 'docker' }
  stages {
    stage("test_capture_output_and_print") {
      steps {
        script {
          def commitSha = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()
          println("commitSha: ${commitSha}")
        }
      }
    }
  }
}

谢谢。我的错误是尝试在脚本闭包之外访问这些值。 - ioreskovic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接