web-dev-qa-db-ja.com

Groovy Jenkinsfileを使用してGit環境変数Jenkinsを読み取ることができない

GenプラグインはJenkinsに(デフォルトで)インストールされていますが、Gitプラグインによって渡されるはずの環境変数を取得できません。を探しています:

GIT_COMMIT
GIT_BRANCH
GIT_PREVIOUS_COMMIT 
GIT_PREVIOUS_SUCCESSFUL_COMMIT
GIT_URL

etc.次のコードを含むJenkinsfileでGithubリポジトリを指しているパイプラインジョブアイテムを使用しています。

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'
}

Githubプラグインのものではなく、envまたはprintenvを使用すると、多くの環境変数が得られます。
Git env変数をジョブに渡す方法に関するヒントはありますか?

更新:フリースタイルプロジェクトを使用してシェルステップでecho $GIT_COMMITを使用すると、Git env変数を簡単に取得できます。 Jenkinsfile + Pipelineジョブアイテムを使用して動作させる方法についても知りたいです。

10
NateW

二重引用符がない、中括弧がない、env.がないため、これは機能しません。

sh 'echo $BRANCH_NAME' 

これはJenkinsfileで期待どおりに機能します。

node {
    sh "echo ${env.BRANCH_NAME}"
}
11
Konrad Kleine

したがって、このStackoverflowの問題に遭遇した他の誰もが、これが現在のパイプライン状況のbugであることを認識しておく必要があります。

ここでたくさんの議論: https://issues.jenkins-ci.org/browse/JENKINS-352

基本的に、パイプラインとのいくつかの非互換性のため、プラグインは環境変数を正しく追加できません。

5
Breedly

これは Gitプラグイン3.3.1 で修正されています

バージョン3.3.1(2017年6月23日)

  • コミットメッセージの最初の行をコンソールログに出力する(JENKINS-38241)
  • scmステップでリビジョンを返すことを許可( JENKINS-261
  • CSRFが有効になっている場合でも、POST to/git/notifyCommitのクラムを必要としない)(JENKINS-34350)
  • パイプラインライブラリ使用時の資格情報追跡nullポインター例外を修正(JENKINS-44640)
  • Gitパラメーターの使用での資格情報追跡nullポインター例外を修正(JENKINS-44087)

私が見つけたほとんどのパイプラインの例では、コードを「ノード」クロージャでラップしています。これは、何らかの理由で、Jenkins Gitプラグインが環境変数を入力することを許可していません。

ただし、代わりに次のようにラップすると、環境変数が適切に設定されます。

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

ここでどのクロージャーが重要であるかはわかりませんが、このフォーマットにより、env.GIT_COMMITなどの環境変数にアクセスできました

1
Noah Bar-Shain

このようなことをする必要があるかもしれません。

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