无法使用Groovy Jenkinsfile读取Git环境变量Jenkins

时间:2016-06-27 01:42:50

标签: git jenkins groovy jenkins-pipeline jenkinsfile

Git插件(默认情况下)安装在我的Jenkins中,但是我无法获得应该由Git插件传入的env变量。我正在寻找:

GIT_COMMIT
GIT_BRANCH
GIT_PREVIOUS_COMMIT 
GIT_PREVIOUS_SUCCESSFUL_COMMIT
GIT_URL

等。我正在使用管道作业项目,该管道作业项目使用以下代码指向带有Jenkins文件的Github存储库

stage 'PushToProd'
node {
    git url: "https://github.com/username/fakeurl.git"
    echo "Starting PushToProd"
    sh 'printenv'
    sh 'env'
    sh 'echo $BRANCH_NAME' 
    sh 'echo $GIT_COMMIT'
}

当我使用envprintenv而不是Github插件时,我获得了大量的环境变量。
关于如何将Git env变量传递给作业的任何提示?

更新:当我使用Freestyle项目并使用shell步骤echo $GIT_COMMIT时,我能够轻松获取Git env变量。仍然想知道如何使用Jenkinsfile + Pipeline作业项来使其工作。

5 个答案:

答案 0 :(得分:11)

由于缺少双引号,缺少大括号和缺少env.,这项工作无法完成:

sh 'echo $BRANCH_NAME' 

这在Jenkinsfile中按预期工作:

node {
    sh "echo ${env.BRANCH_NAME}"
}

答案 1 :(得分:5)

因此,任何偶然发现此Stackoverflow问题的人都应该知道这是一个 bug 与当前的管道情况。

这里有很多讨论:https://issues.jenkins-ci.org/browse/JENKINS-35230

基本上,由于与管道的某些不兼容性,插件无法正确添加环境变量。

答案 2 :(得分:3)

这已在Git plugin 3.3.1

中修复

版本3。3。1(2017年6月23日)

  • 在控制台日志中打印第一行提交消息(JENKINS-38241)
  • 允许scm步骤返回修订版本(JENKINS-26100
  • 即使启用了CSRF(JENKINS-34350),也不要求将POST压缩到/ git / notifyCommit(JENKINS-34350)
  • 修复凭据跟踪管道库使用中的空指针异常(JENKINS-44640)
  • 修复git参数使用中的凭据跟踪空指针异常(JENKINS-44087)

答案 3 :(得分:1)

你可能需要这样做。

node {
   def branch = env.BRANCH_NAME
   sh "My branch name: ${branch}"
}

答案 4 :(得分:1)

我发现的大多数管道示例都将代码包装在“节点”闭包中,由于某种原因,它不允许Jenkins Git插件填充环境变量。

但是,如果您将它包装成这样,则可以正确设置环境变量:

pipeline {
  agent {
    label ('<AGENT>')
  }
  stages {
    stage('<STAGE>') {
      steps {
        <CODE>
      }
    }
  }
}

我不确定哪些关闭在这里至关重要,但这种格式允许我访问env变量,例如env.GIT_COMMIT