7

Próbowałem pobrać komunikat zatwierdzenia git w pliku Jennfile i zapobiec kompilacji w oparciu o komunikat zatwierdzenia.Jak uzyskać najnowszą wiadomość zatwierdzenia git i zapobiec kompilacji jenkins, jeśli komunikat commit zawiera [ci skip]?

env.GIT_COMMIT nie zwraca szczegółów zatwierdzenia w pliku Jennfile.

Jak uzyskać najnowszy komunikat zatwierdzenia git i zapobiec kompilacji jenkins, jeśli komunikat commit zawiera w nim [ci skip]?

+2

spróbuj sh "git log -1" i grep odpowiedni tekst. – Amityo

+0

@Amityo: Dziękuję za pomoc. Potrzebuję jeszcze jednej kwerendy ... jak zapobiec jenkins budować w Jennfile, jeśli wiadomość zawiera zawartość [ci pominąć]? –

Odpowiedz

10

Build minie, gdy [ci pominąć] znajduje się w ostatniej dziennika git, ale nie będzie działać rzeczywisty kod budowlanej (zastąpienie pierwszego rachunku ECHO)

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

Aby uzyskać więcej informacji na temat używania 'sh': https://issues.jenkins-ci.org/browse/JENKINS-26133 –

3

myślę można łatwo zrobić w wielu konfiguracji pracy rurociągu oddział branch Źródła> Pozostałe> Zachowania Polling ignoruje zobowiązuje pewnych komunikatów multi branch pipeline job configuration

+0

Podczas korzystania z tego podejścia, $ CHANGE_ID nie jest dostępny w pliku Jenkinsfile. –

5

miałem ten sam problem. Używam potoków. Rozwiązałem ten problem, implementując shared library.

Kod biblioteki to:

// 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' 
    } 
} 

Następnie w moim Jenkinsfile:

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

Jak widać, kompilacja oznaczona jako NOT_BUILT. Możesz go zmienić na ABORTED, ale nie można go ustawić na SUCCESS, ponieważ a build result can only get worse

+0

Dzięki, działa świetnie! #testedAndApproved –

Powiązane problemy