Jenkinsパイプラインを作成しましたが、scmからパイプラインスクリプトを取得しています。
ブランチ指定子を「all
」に設定したため、ブランチへの変更に基づいてビルドされます。
Jenkinsfileからこのビルドを引き起こすブランチ名にアクセスするにはどうすればよいですか?
私が試したすべてのものは、nullをエコーアウトします
sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()
これは常にmaster
です。
パイプライン用のjenkinsfileがある場合、実行時に 環境変数 にブランチ名が表示されるかどうかを確認します。
以下を使用して印刷できます。
pipeline {
agent any
environment {
DISABLE_AUTH = 'true'
DB_ENGINE = 'sqlite'
}
stages {
stage('Build') {
steps {
sh 'printenv'
}
}
}
}
ただし、 PR 91 は、特定のパイプライン構成でのみブランチ名が設定されることを示しています。
パイプラインではなく、マルチブランチパイプラインを使用します。
私のスクリプトでは...
stage('Build') {
node {
echo 'Pulling...' + env.BRANCH_NAME
checkout scm
}
}
収量...
Pulling...master
同僚からscm.branches[0].name
を使用するように言われましたが、うまくいきました。私はそれをJenkinsfileの関数にラップしました:
def getGitBranchName() {
return scm.branches[0].name
}
マルチブランチパイプラインに切り替えると、ブランチ名にアクセスできました。通常のパイプラインは推奨されませんでした。
私にとってこれはうまくいきました:(Jenkins 2.150を使用し、単純なパイプラインタイプを使用します-マルチブランチではなく、私のブランチ指定子: '**')
echo 'Pulling... ' + env.GIT_BRANCH
出力:
Pulling... Origin/myBranch
myBranchは機能ブランチの名前です
ビルドパラメーターをブランチ指定子として使用した場合、scm.branches
から名前を取得するだけでは十分ではありません。 ${BRANCH}
。その文字列を実際の名前に展開する必要があります。
scm.branches.first().getExpandedName(env.getEnvironment())
getEnvironment()
は明示的なゲッターでなければなりません。そうでない場合、env
はenvironmentと呼ばれる環境変数を検索します。
これらのメソッドを承認して、サンドボックスからアクセスできるようにする必要があることを忘れないでください。