2

Ich habe nicht in der Lage gewesen, irgendwelche Informationen darüber zu finden, so dass ich hoffe, ihr mir auf diesenJenkins Pipeline, bitbucket Haken und Maven Release Plugin Endlosschleife

helfen können

ich ein Maven-Projekt gehostet habe in bitbucket, dass ein BitBucket Webhook zeigt auf someurl/bitbucket aufgelegt/hat, ist dieser Haken löst den Build von meinem Projekt, das durch eine Pipeline definiert ist, die diese Struktur hat:

node { 
    stage 'Checkout' 
    git url: 'https:...' 

    def mvnHome = tool 'M3' 

    #Various stages here 
    ... 
    stage 'Release' 
    sh "${mvnHome}/bin/mvn -B clean install release:prepare release:perform release:clean" 
} 

das Problem ist, dass maven Release Plugin Änderungen schiebt zu BitBucket, und dies löst wieder das jenkins-Skript, eine unendliche Schleife von Builds, gibt es eine Möglichkeit, dies zu verhindern?

Ich habe versucht, ohne Erfolg

+0

Ändern Sie den Webhook? –

+0

@RobKielty wo können Sie den Webhook ändern? In der jenkins Konfiguration des Jobs sehe ich nur eine Checkbox "Build, wenn eine Änderung an BitBucket" ohne erweiterte Optionen, und in Bit Bucket ich kann nur den Trigger (Repository Push), gibt es einen anderen Ort, wo ich die ändern kann Verhalten des Triggers/Webhooks? –

Antwort

2

Aus meiner Sicht eine ruhige Zeit in Jenkins Einstellung sollten Sie bestimmte Aufträge für Build und Release, und die Freigabe Job sollte manuell ausgelöst werden. Wie auch immer, wenn es aus irgendeinem Grund sie im Job haben Sie die Botschaft des letzten Commit überprüfen:

node { 
    git 'https...' 
    sh 'git log -1 > GIT_LOG' 
    git_log = readFile 'GIT_LOG' 
    if (git_log.contains('[maven-release-plugin]')) { 
    currentBuild.result = 'ABORTED' 
    return 
    } 
    ... // continue with release or whatever 

} 
0

A New Way to Do Continuous Delivery with Maven and Jenkins Pipeline Artikel Ansatz löst das Endlos-Schleife:

Verwenden Sie das Maven Release Plugin um eine Freigabe vorzubereiten mit pushChanges = false (wir werden nicht die Freigabe commits zurück zu master) und preparationGoals = initialisieren (es ist uns egal, wenn das Tag ist schlecht, da wir nur Tags, die gut sind, drücken)

sh "${mvnHome}/bin/mvn -DreleaseVersion=${version} -DdevelopmentVersion=${pom.version} -DpushChanges=false -DlocalCheckout=true -DpreparationGoals=initialize release:prepare release:perform -B" 
0

können andere Lösung sein die git Haken (post-receive) und fügen Sie eine bedingte curl ähnlich zu diesem Skript zu ändern:

MVN Release Änderungen ignoriert
#!/bin/bash 
git_log=$(git log --branches -1) 
if ! [[ $git_log =~ .*maven-release-plugin.* ]] ; 
then 
curl http://buildserver:8080/git/notifyCommit?url=ssh://[email protected]/projects/name.git; 
fi