git - 从 Jenkins 管道捕获 shell 脚本输出

标签 git shell jenkins groovy jenkins-pipeline

我正尝试在我的 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}")

我没有得到真正的值(value),而是留下了这个:

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

我做错了什么吗?我该如何正确检索我需要的值?

编辑:不,建议的重复不是答案,因为我知道用于检索我需要的信息的 shell 命令。我的问题是信息传递给我的方式,作为 ClosureModelTranslator 而不是 String

最佳答案

这个完整的流程适合您吗?使用 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}")
        }
      }
    }
  }
}

关于git - 从 Jenkins 管道捕获 shell 脚本输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43738237/

相关文章:

java - 获取最后提交者的用户名?

linux - 有没有办法改变vim的默认模式

linux - 如何删除与linux命令输出匹配的文件

python - 为什么 Jenkins 捕获的标准输出忽略控制台输出上的换行符?

git - 将 git repo 中的所有文件替换为本地计算机上的文件

node.js - 在不使用额外的 NPM 包的情况下检查 package.json 是否在 shell 脚本中具有特定名称的脚本

tomcat - maven一行部署到tomcat集群(多个)

验证连接时 git 权限被拒绝(公钥)

git - 我怎样才能在 Bitbucket 或类似的东西上获得部署 key 的写入权限?

git - 如何从 merge 中排除文件