簡體   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