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
'''
}
}
}
}
ようやく例を見つけ、その方法を理解することができました。
スクリプトコマンドを使用して、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
...
}
}
docs の引用:
GIT_BRANCH
Gitベースのプロジェクトの場合、この変数にはビルド用にチェックアウトされたGitブランチ(通常はOrigin/master)が含まれています
特にPipelineプラグインの場合、この問題に対する答えは StackOverflow にあります。
Env.BRANCH_NAME変数にはブランチ名が含まれています。
Pipeline Groovyプラグイン2.18以降、BRANCH_NAMEのみを使用することもできます(envは必須ではありませんが、受け入れられます)。
条件によっては 、この変数は空である可能性があります。次のように修正します:
チェックアウト手順の「エクステンション」に[$ class: 'LocalBranch'、localBranch: "**"]を追加します。
マルチブランチパイプラインのJenkins宣言型パイプラインジョブは、ジョブを定義したマルチブランチパイプラインのgit構成を尊重します。各ジョブにリモートブランチと一致する名前のローカルブランチをチェックアウトさせる場合は、「一致するローカルブランチにチェックアウト」特性をマルチブランチパイプライン定義に追加します。そのマルチブランチパイプラインで作成された各ジョブは、名前付きローカルブランチにチェックアウトします。
notがマルチブランチパイプラインの一部である宣言型パイプラインジョブを使用している場合は、gitプラグインのローカルブランチ拡張機能を使用して、作成するローカルブランチの名前を定義できます。