7

私はgit commitメッセージをjenkinsfileに入れてコミットメッセージに基づいてビルドを行おうとしました。コミットメッセージに[ci skip]が含まれている場合、git最新のコミットメッセージを取得してジェンキンスビルドを防止するにはどうすればよいですか?

env.GIT_COMMITは、jenkinsfileでコミットの詳細を返しません。

コミットメッセージに[ci skip]が含まれている場合、最新のコミットメッセージを取得してジェンキンスビルドを防止するにはどうすればよいですか?

+2

sh "git log -1"を試して関連するテキストをgrepしようとするので、SUCCESSに設定することはできません。 – Amityo

+0

@Amityo:本当に助けてくれてありがとう。もう1つのクエリが必要です...メッセージに[ci skip]の内容が含まれている場合、jenkinsfileでjenkinsビルドを防ぐ方法を教えてください。 –

答えて

10

[CIスキップ]を、私はあなたが簡単にできると思い、最後のgitのログに提供されていますが、実際のビルドコード(最初のエコー文の交換)

node { 
    checkout scm 
    result = sh (script: "git log -1 | grep '\\[ci skip\\]'", returnStatus: true) 
    if (result != 0) { 
    echo "performing build..." 
    } else { 
    echo "not running..." 
    } 
} 
+1

'sh'の使い方の詳細については、https://issues.jenkins-ci.org/browse/JENKINS-26133 –

3

を実行しないときビルドが通過しますマルチブランチパイプラインのジョブ構成で 支店ソース>追加の動作>ポーリングは、特定のメッセージmulti branch pipeline job configuration

+0

を参照してください。このアプローチを使用する場合、$ CHANGE_IDはJenkinsfileでは使用できません。 –

5

私は同じ問題を持っていたとのコミットを無視することを行います。私はパイプラインを使用しています。私はshared libraryを実装してこの問題を解決しました。私Jenkinsfileで、その後

// vars/ciSkip.groovy 

def call(Map args) { 
    if (args.action == 'check') { 
     return check() 
    } 
    if (args.action == 'postProcess') { 
     return postProcess() 
    } 
    error 'ciSkip has been called without valid arguments' 
} 

def check() { 
    env.CI_SKIP = "false" 
    result = sh (script: "git log -1 | grep '.*\\[ci skip\\].*'", returnStatus: true) 
    if (result == 0) { 
     env.CI_SKIP = "true" 
     error "'[ci skip]' found in git commit message. Aborting." 
    } 
} 

def postProcess() { 
    if (env.CI_SKIP == "true") { 
     currentBuild.result = 'NOT_BUILT' 
    } 
} 

ライブラリのコードはこれです

pipeline { 
    stages { 
    stage('prepare') { steps { ciSkip action: 'check' } } 
    // other stages here ... 
    } 
    post { always { ciSkip action: 'postProcess' } } 
} 

あなたが見ることができるように、ビルドはNOT_BUILTとしてマークされます。必要ならばABORTEDに変更できますが、a build result can only get worse

+0

ありがとう、それは素晴らしい作品! #testedAndApproved –

関連する問題