11

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 环境变量传递给作业的任何提示?

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

4

5 回答 5

13

由于缺少双引号、缺少花括号和缺少以下内容,这将不起作用env.

sh 'echo $BRANCH_NAME' 

这在 Jenkinsfile 中按预期工作:

node {
    sh "echo ${env.BRANCH_NAME}"
}
于 2016-07-29T11:36:23.130 回答
5

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

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

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

于 2017-01-04T21:51:32.227 回答
3

这已在Git 插件 3.3.1中修复

版本 3.3.1(2017 年 6 月 23 日)

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

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

但是,如果您像这样包装它,则环境变量已正确设置:

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

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

于 2017-11-03T13:58:22.557 回答
1

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

node {
   def branch = env.BRANCH_NAME
   sh "My branch name: ${branch}"
}
于 2016-07-01T01:04:14.517 回答