Wie kann ich Jenkins / Hudson anweisen, einen Build nur für Änderungen an einem bestimmten Projekt in meinem Git-Baum auszulösen?
Das Git-Plugin verfügt über eine Option (ausgeschlossene Region), mit der Regexe verwendet werden können, um zu bestimmen, ob das Erstellen übersprungen werden soll, basierend darauf, ob die Dateien im Commit mit der Regex der ausgeschlossenen Region übereinstimmen.
Leider verfügt das Standard-Git-Plugin derzeit nicht über die Funktion "Eingeschlossene Region" (1.15). Jemand hat jedoch Patches auf GitHub veröffentlicht, die auf Jenkins und Hudson funktionieren und die gewünschte Funktion implementieren.
Es ist ein wenig Arbeit zu bauen, aber es funktioniert wie angekündigt und war äußerst nützlich, da einer meiner Git-Bäume mehrere unabhängige Projekte hat.
https://github.com/jenkinsci/git-plugin/pull/49
Update: Das Git-Plugin (1.16) verfügt jetzt über die Regionsfunktion "Enthalten".
Ignored commit c6e2b1dca0d1885: No paths matched included region whitelist
. Irgendeine Ahnung? Weitere Details hier: stackoverflow.com/questions/47439042/…Grundsätzlich benötigen Sie zwei Jobs. Eine, um zu überprüfen, ob sich die Dateien geändert haben, und eine, um den eigentlichen Build durchzuführen:
Job # 1
Dies sollte bei Änderungen in Ihrem Git-Repository ausgelöst werden. Anschließend wird geprüft, ob sich der von Ihnen angegebene Pfad (hier "src") geändert hat, und anschließend wird mithilfe der Jenkins-CLI ein zweiter Job ausgelöst.
Job # 2
Konfigurieren Sie diesen Job so, dass er einen Parameter wie GIT_REVISION verwendet, um sicherzustellen, dass Sie genau die Revision erstellen, die der erste Job erstellt hat.
quelle
$? || exit 0
...test $? -eq 0 || exit 0
vielleicht?Wenn Sie eine deklarative Syntax von Jenkinsfile verwenden , um Ihre Gebäudepipeline zu beschreiben, können Sie die Änderungssatzbedingung verwenden, um die Bühnenausführung nur auf den Fall zu beschränken, in dem bestimmte Dateien geändert werden. Dies ist jetzt eine Standardfunktion von Jenkins und erfordert keine zusätzliche Konfiguration / Software.
Sie können mehrere Bedingungen mit
anyOf
oderallOf
Schlüsselwörtern für das ODER- oder UND- Verhalten entsprechend kombinieren :quelle
Dies wirkt sich zwar nicht auf einzelne Jobs aus, Sie können dieses Skript jedoch verwenden, um bestimmte Schritte zu ignorieren, wenn das letzte Commit keine Änderungen enthielt:
quelle
api/
Ordner geändert hat .) Wenn Sie dies beheben können, würde ich eine vorgeschlagene Änderung lieben !Wenn die Logik für die Auswahl der Dateien nicht trivial ist, würde ich bei jeder Änderung die Skriptausführung auslösen und dann ein Skript schreiben, um zu überprüfen, ob tatsächlich ein Build erforderlich ist, und dann einen Build auslösen, wenn dies der Fall ist.
quelle
Sie können hierfür das Generic Webhook Trigger Plugin verwenden .
Mit einer Variablen wie
changed_files
und Ausdruck$.commits[*].['modified','added','removed'][*]
.Sie können einen Filtertext wie
$changed_files
und einen regulären Ausdruck wie"folder/subfolder/[^"]+?"
if verwenden, wenn diesfolder/subfolder
der Ordner ist, der Builds auslösen soll.quelle
Ich habe diese Frage in einem anderen Beitrag beantwortet:
So erhalten Sie eine Liste der geänderten Dateien seit dem letzten Build in Jenkins / Hudson
Sie können die Prüfung direkt oben in der Exec-Shell des Jobs hinzufügen.
exit 0
Wenn keine Änderungen festgestellt werden, können Sie jederzeit die oberste Ebene nach Eincheckvorgängen abfragen, um einen Build auszulösen.quelle
Ich habe dieses Skript geschrieben, um Tests zu überspringen oder auszuführen, wenn es Änderungen gibt:
Sie können also Folgendes tun:
./scripts/git-run-if-changed.sh cmd vendor go.mod go.sum fixtures/ tools/ -- go test
quelle