web-dev-qa-db-ja.com

宣言的なJenkinsパイプラインでのGIT変数の使用

JenkinsパイプラインでGIT変数にアクセスするのに苦労しています

パイプラインのステージのbashコード内でチェックアウトされているGITブランチを知る必要があります。これを使用して、異なる出力ファイル名を作成します。私のパイプラインは宣言的であり、スクリプトではなく、Jenkins 2.150.1を使用しています

オンラインで見つけたものをすべて試しましたが、ほとんどが不完全なコードまたはスクリプトパイプライン用です。または単に情報をまとめることができません。

私がこれに費やした時間を教えてください。宣言的なパイプラインを使用する完全に機能する例があるといいですね。

これは私がこれまでに試したものです:

#1

sh内でgitを実行しますが、Jenkinsはブランチではなくコミットをチェックアウトするため、ヘッドが分離されます

#2

シェルから環境変数を探していますが、GITに関連するセットはありません。このスニペット

steps {
  sh 'echo $GIT_BRANCH'
}

常に空を返します。次にGroovyを試してみました。

steps {
  echo "${env.GIT_BRANCH}"
}

nullを出力します。

「グローバル変数リファレンス」には、次のような記述があります。

SCM-specific variables such as GIT_COMMIT are not automatically defined as environment variables; rather you can use the return value of the checkout step.

私はそれを行う方法をオンラインで検索し、このコードをまとめました:

pipeline {
  stages {
    stage('Build') {
      steps {
        def scmVars = checkout([...])
        echo 'scm : the commit id is ' + scmVars.GIT_COMMIT
      }
    }
  }
}

しかし、それは例外で失敗します

#4

environmentコマンドを使用して、なんとかしてその値を取得してください

#5

jenkinsfileの他のレベルで変数を探していますが、スクリプトパイプラインでしか実行できないようです

#5

ビルドURLとAPI呼び出しにアクセスしようとしましたが、プロキシを使用しているため、URLが複雑になります。

My Jenkinsfile

pipeline {
  stages {
    stage('Build') {
      steps {
        checkout([
          $class: 'GitSCM',
          doGenerateSubmoduleConfigurations: false,
          userRemoteConfigs: [[
            url: '...',
            credentialsId: '...'
          ]],
          branches: [ [name: '*/master'] ]
        ])

        sh '''
        #!/bin/bash -x
        echo $MY_GIT_BRANCH_THAT_I_CANT_FIND
        '''
      }
    }
  }
}
7
ColOfAbRiX

ようやく例を見つけ、その方法を理解することができました。

スクリプトコマンドを使用して、Mapから返されたcheckoutを取得し、Mapを環境変数として保存する必要があります。

stage('Checkout code') {
  steps {
    script {
      // Checkout the repository and save the resulting metadata
      def scmVars = checkout([
        $class: 'GitSCM',
        ...
      ])

      // Display the variable using scmVars
      echo "scmVars.GIT_COMMIT"
      echo "${scmVars.GIT_COMMIT}"

      // Displaying the variables saving it as environment variable
      env.GIT_COMMIT = scmVars.GIT_COMMIT
      echo "env.GIT_COMMIT"
      echo "${env.GIT_COMMIT}"
    }

    // Here the metadata is available as environment variable
    ...
  }
}
9
ColOfAbRiX

docs の引用:

GIT_BRANCH

Gitベースのプロジェクトの場合、この変数にはビルド用にチェックアウトされたGitブランチ(通常はOrigin/master)が含まれています

特にPipelineプラグインの場合、この問題に対する答えは StackOverflow にあります。

Env.BRANCH_NAME変数にはブランチ名が含まれています。

Pipeline Groovyプラグイン2.18以降、BRANCH_NAMEのみを使用することもできます(envは必須ではありませんが、受け入れられます)。

条件によっては 、この変数は空である可能性があります。次のように修正します:

チェックアウト手順の「エクステンション」に[$ class: 'LocalBranch'、localBranch: "**"]を追加します。

3
fuero

マルチブランチパイプラインのJenkins宣言型パイプラインジョブは、ジョブを定義したマルチブランチパイプラインのgit構成を尊重します。各ジョブにリモートブランチと一致する名前のローカルブランチをチェックアウトさせる場合は、「一致するローカルブランチにチェックアウト」特性をマルチブランチパイプライン定義に追加します。そのマルチブランチパイプラインで作成された各ジョブは、名前付きローカルブランチにチェックアウトします。

notがマルチブランチパイプラインの一部である宣言型パイプラインジョブを使用している場合は、gitプラグインのローカルブランチ拡張機能を使用して、作成するローカルブランチの名前を定義できます。

0
Mark Waite