web-dev-qa-db-ja.com

Jenkins Pipeline / Jenkinsfileでgitブランチ名を取得します

Jenkinsパイプラインを作成しましたが、scmからパイプラインスクリプトを取得しています。
ブランチ指定子を「all」に設定したため、ブランチへの変更に基づいてビルドされます。

Jenkinsfileからこのビルドを引き起こすブランチ名にアクセスするにはどうすればよいですか?

私が試したすべてのものは、nullをエコーアウトします

sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim()

これは常にmasterです。

35
Alex Yurkowski

パイプライン用のjenkinsfileがある場合、実行時に 環境変数 にブランチ名が表示されるかどうかを確認します。

以下を使用して印刷できます。

pipeline {
    agent any

    environment {
        DISABLE_AUTH = 'true'
        DB_ENGINE    = 'sqlite'
    }

    stages {
        stage('Build') {
            steps {
                sh 'printenv'
            }
        }
    }
}

ただし、 PR 91 は、特定のパイプライン構成でのみブランチ名が設定されることを示しています。

14
VonC

パイプラインではなく、マルチブランチパイプラインを使用します。

私のスクリプトでは...

stage('Build') {
    node {
        echo 'Pulling...' + env.BRANCH_NAME
        checkout scm

    }
}

収量...

Pulling...master
31
James

同僚からscm.branches[0].nameを使用するように言われましたが、うまくいきました。私はそれをJenkinsfileの関数にラップしました:

def getGitBranchName() {
    return scm.branches[0].name
}
8
Attila123

マルチブランチパイプラインに切り替えると、ブランチ名にアクセスできました。通常のパイプラインは推奨されませんでした。

5
Alex Yurkowski

私にとってこれはうまくいきました:(Jenkins 2.150を使用し、単純なパイプラインタイプを使用します-マルチブランチではなく、私のブランチ指定子: '**')

echo 'Pulling... ' + env.GIT_BRANCH

出力:

Pulling... Origin/myBranch

myBranchは機能ブランチの名前です

3
alex

ビルドパラメーターをブランチ指定子として使用した場合、scm.branchesから名前を取得するだけでは十分ではありません。 ${BRANCH}。その文字列を実際の名前に展開する必要があります。

scm.branches.first().getExpandedName(env.getEnvironment())

getEnvironment()は明示的なゲッターでなければなりません。そうでない場合、envenvironmentと呼ばれる環境変数を検索します。

これらのメソッドを承認して、サンドボックスからアクセスできるようにする必要があることを忘れないでください。

0
0neel