私はジェンキンスのグルーヴィーなスクリプトのために私のブランチの名前を取得しようとしています。現在のブランチ名を取得できません。私は次を試します:
stage('Check out code')
checkout scm
echo "My branch is: ${env.BRANCH_NAME}"
出力は次のとおりです。常にnullを返します。
Checking out Revision 33b531b2f1caaf8b64d968e437306f39d2dba1da (Origin/pipeline)
> git.exe config core.sparsecheckout # timeout=10
> git.exe checkout -f 33b531b2f1caaf8b64d968e437306f39d2dba1da
[Pipeline] echo
My branch is: null
何か不足していますか?
この変数は、マルチブランチピップラインでのみ機能します。
BRANCH_NAMEマルチブランチプロジェクトの場合、たとえば、機能ブランチからではなくマスターから実稼働環境にデプロイする場合など、ビルドされるブランチの名前に設定されます。
私は通常のピップラインでテストしていました
私の回避策、他の誰かのために働くかどうかわからない..
def branchName = getCurrentBranch()
echo 'My branch is' + branchName
def getCurrentBranch () {
return sh (
script: 'git rev-parse --abbrev-ref HEAD',
returnStdout: true
).trim()
}
git.exe checkout -f 33b531b2f1caaf8b64d968e437306f39d2dba1da
これにより、gitリポジトリは detached HEADモード になります。これは本来、ブランチを持ちません。
Jenkinsfile から:
チェックアウト手順では、ソース管理からコードをチェックアウトします。
scm
は、このPipelineの実行をトリガーした特定のリビジョンを複製するようにチェックアウトステップに指示する特別な変数です。
${env.BRANCH_NAME}
無効である。
「 BRANCH_NAMEおよびGIT_COMMITにアクセスするJenkinsワークフローチェックアウト 」で説明したように、groovy構文でチェックアウトしたSHA1を取得できます(JenkinsパイプラインDSLに適合させるため)。
sh 'git rev-parse HEAD > commit'
def commit = readFile('commit').trim()
これと同じ問題がありましたが、変更して解決しました
println "${env.BRANCH_NAME}"
に
println "${BRANCH_NAME}"
私のプラグインも分離モードでチェックアウトしていることに注意してください:
git checkout -f e10a170e17fb5f9282f903a7b3cd17bd2e181dee