7

jenkinsfile'da git taahhüt mesajını almaya çalıştım ve yapıyı taahhüt mesajına göre engelleyin.Git iletisini iletme iletisini nasıl alır ve iletme iletisinde [ci atlama] içeriyorsa jenkins oluşturulmasını nasıl önlersiniz?

env.GIT_COMMIT taahhüt ayrıntılarını jenkinsfile içinde döndürmez.

Git iletisi en son iletme iletisini nasıl alır ve iletideki iletide [ci atlama] içeriyorsa jenkins oluşturulmasını nasıl engeller?

+2

"git log -1" ayarını yapıp ilgili metni grep olarak ayarlayamazsınız, SUCCESS olarak ayarlanamaz. – Amityo

+0

@Amityo: Gerçekten çok yardımcı oldu. İleti [ci skip] içerik içeriyorsa jenkinsfile'da jenkins oluşturulmasını nasıl önleyebilirim? –

cevap

10

inşa [ci atlamak] Son git günlüğüne sağlandığında geçecek ama asıl yapı kodu (ilk yankı açıklamaya yedek)

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' kullanımı hakkında daha fazla bilgi için: https://issues.jenkins-ci.org/browse/JENKINS-26133 –

3

Ben kolayca yapabileceğini düşünüyorum yayınlanmaz çoklu şube boru hattı işi yapılandırmasında şube Kaynakları> Ek Davranışlar> Yoklama belli mesajlar multi branch pipeline job configuration

+0

Bu yaklaşımı kullanırken, $ CHANGE_ID Jenkinsfile'da kullanılamaz. –

5

Ben aynı sorunu vardı ile kaydedilmesini görmezden böyle yapar. Boru hatları kullanıyorum. Bu sorunu bir shared library uygulayarak çözdüm. Benim Jenkinsfile içinde, Sonra

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

:

kütüphanenin kod şudur

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

Gördüğünüz gibi, inşa NOT_BUILT olarak işaretlenir. İsterseniz, ABORTED olarak değiştirebilir, ancak a build result can only get worse

+0

Teşekkürler, harika çalışıyor! #testedAndApproved –