Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用Groovy Jenkins文件读取Git环境变量Jenkins_Git_Jenkins_Groovy_Jenkins Pipeline_Jenkinsfile - Fatal编程技术网

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

无法使用Groovy Jenkins文件读取Git环境变量Jenkins,git,jenkins,groovy,jenkins-pipeline,jenkinsfile,Git,Jenkins,Groovy,Jenkins Pipeline,Jenkinsfile,Git插件(默认情况下)安装在my Jenkins中,但我无法获取Git插件应该传入的环境变量。我正在寻找: GIT_COMMIT GIT_BRANCH GIT_PREVIOUS_COMMIT GIT_PREVIOUS_SUCCESSFUL_COMMIT GIT_URL 等等,我使用管道作业项,它指向一个Github repo和Jenkins文件,代码如下 stage 'PushToProd' node { git url: "https://github.com/username/

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

GIT_COMMIT
GIT_BRANCH
GIT_PREVIOUS_COMMIT 
GIT_PREVIOUS_SUCCESSFUL_COMMIT
GIT_URL
等等,我使用管道作业项,它指向一个Github repo和Jenkins文件,代码如下

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'
}
当我使用
env
printenv
时,我得到了大量的环境变量,而不是Github插件变量。
关于如何将Git env变量传递到作业中的技巧


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

您可能需要这样做

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

由于缺少双引号、缺少大括号和
env.
,这将不起作用:

sh 'echo $BRANCH_NAME' 
这在Jenkins文件中按预期工作:

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

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

这里有很多讨论:

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

这在

版本3.3.1(2017年6月23日)

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

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

但是,如果改为这样包装,则会正确设置环境变量:

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

我不确定哪些闭包在这里很重要,但这种格式允许我访问环境变量,例如
env.GIT\u COMMIT

您可以使用
env.VARIABLE
访问Jenkins文件中的环境变量。我记得
env.BRANCH\u NAME
起作用。上述问题的可能重复项-现已修复:-)Git插件3.3.1已经发布,并合并了必要的pull请求。哇!!谢谢你,摩根!事实上,如果您使用的是通用的
签出scm
,这是行不通的。还需要最新的Jenkins。它仍然不起作用,也许workplace cps插件也需要发布……嘿@Konrad Kleine,我也有同样的问题,printenv甚至没有在管道中打印git env变量。你对此有什么提示吗?嘿@TibinPaul,没有,我没有任何提示给你,并且停止使用Jenkins管道。