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

Not able to read Git Environment variables Jenkins using Groovy Jenkinsfile

Git 插件已安装(默认情况下)在我的 Jenkins 中,但我无法获取本应由 Git 插件传入的环境变量。我在寻找:

GIT_COMMIT
GIT_BRANCH
GIT_PREVIOUS_COMMIT 
GIT_PREVIOUS_SUCCESSFUL_COMMIT
GIT_URL

等我正在使用指向 Github 存储库的流水线作业项,Jenkinsfile 的代码如下

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 变量的任何提示?

Update:当我使用 Freestyle 项目并有一个 shell 步骤使用 echo $GIT_COMMIT。仍然想知道如何使用 Jenkinsfile + 管道作业项让它工作。

您可能需要做这样的事情。

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

由于缺少双引号、缺少大括号和缺少 env.:

,这将不起作用
sh 'echo $BRANCH_NAME' 

这在 Jenkinsfile 中按预期工作:

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

因此,任何其他偶然发现此 Whosebug 问题的人都应该知道这是一个 错误 当前管道情况。

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

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

这已在 Git plugin 3.3.1

中修复

版本 3.3.1(2017 年 6 月 23 日)

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

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

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

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

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