繁体   English   中英

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

[英]Not able to read Git Environment variables Jenkins using Groovy Jenkinsfile

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

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 步骤使用echo $GIT_COMMIT时,我能够轻松获取 Git 环境变量。 仍然想知道如何使用 Jenkinsfile + Pipeline 作业项让它工作。

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

sh 'echo $BRANCH_NAME' 

这在 Jenkinsfile 中按预期工作:

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

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

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

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

这在Git 插件 3.3.1 中已修复

版本 3.3.1(2017 年 6 月 23 日)

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM