Um es in "BDD" -Begriffen auszudrücken:
Hintergrund:
Da ich zu einem GH-Repo beitrageWenn ich eine Pull-Anfrage erstelle,
sollte Travis das neueste Commit erstellenWenn ich auf eine vorhandene Pull-Anfrage
drücke, sollte Travis das neueste Commit erstellenWenn ich eine Pull-Anfrage mit Master zusammenführe,
sollte Travis Master erstellen
Ich war verwirrt über Travis-CIs Einstellungen "Build Pushes" und "Build PRs" wie folgt:
- Wenn Sie beide aktivieren, wird jede Pull-Anforderung zweimal von Travis erstellt
- einmal für das Commit in diesem Zweig
- und noch einmal für das Zusammenführungs-Commit dieses Zweigs in sein Ziel
- Wenn Sie nur "PRs erstellen" aktivieren, werden PRs erstellt, dies führt jedoch nicht zu Builds nach dem Zusammenführen (dh auf dem Master).
- Das Aktivieren von "Pushs" Brute-Force erfüllt die oben genannten Kriterien, indem alle Pushs zum Repo erstellt werden. Sie können versuchen, Dinge durch Zweige mit weißer und schwarzer Liste zu finanzieren, aber das wird Sie wahrscheinlich beißen, es sei denn, Sie sind streng mit Zweignamen diszipliniert.
Dies wird in den Travis-CI-Dokumenten und in der GH-Ausgabe Nr. 3241 näher erläutert .
Kennt jemand eine Konfiguration, die die oben genannten Kriterien erfüllt?
github
travis-ci
pull-request
Brian Gerstle
quelle
quelle
Antworten:
Ich fand schließlich ein weiteres GH-Problem ( Nr. 2111 ), das mich auf die Idee brachte, sowohl PRs als auch Pushs zu aktivieren, aber mit einer Whitelist, um Pushs auf einen bestimmten Zweig zu beschränken. Dies scheint die Kriterien für meinen Workflow zu erfüllen. Folgendes habe ich getan:
.travis.yml
zum White-List-master
Zweig (dh nur Build-Pushs zum Master):Testen Sie es, indem Sie eine PR mit der
.travis.yml
Änderung und eine andere PR mit einigen leeren Commits erstellen , um zu überprüfen, ob es auch für Gabeln funktioniert .Überprüfen Sie den erfolgreichen Merge Commit Build vom Master .
quelle
master
? Ich glaube, dies beruht auf einer seltsamen Eigenart von Travis 'PR-Build-Env-Vars und würde in diesem Fall nicht funktionieren.master
.Gerade in Travis Docs gefunden
Zu .travis.yml hinzufügen
Alternative:
quelle
Angenommen, Sie möchten alle PRs erstellen , reicht Folgendes aus. Aktivieren Sie sowohl Zweig- als auch PR-Builds auf der Einstellungsseite und fügen Sie diese Zeile als erste Zeile in Ihre ein
travis.yml
:if: (type = push AND branch IN (master, dev)) OR (type = pull_request AND NOT branch =~ /no-ci/)
Dies versucht einen Push-Build für alle Pushs und einen PR-Build für alle Pushs zu einem offenen PR, filtert jedoch alle heraus, die die Bedingung nicht erfüllen. Möglicherweise müssen Sie dies ein wenig ändern - die Klausel, keine Zweige mit no-ci irgendwo in ihrem Namen zu erstellen, ist offensichtlich optional, und Sie haben möglicherweise nicht zwei Zweige, auf denen Sie immer Builds ausführen möchten.
Weitere Informationen zu Bedingungen und bedingten Builds finden Sie auf Travis 'Website.
quelle
Der in der akzeptierten Antwort beschriebene Whitelist-Ansatz weist einige wesentliche Einschränkungen auf. Insbesondere wird der nicht redundante Aufbau beliebiger Zweige ohne PR-Eröffnung nicht unterstützt.
Ich habe ein Problem eröffnet und nach einer besseren Lösung gefragt .
quelle
Sie können den nächsten Workflow verwenden, wenn Sie nicht nur
master
Zweige, sondern auch einige andere Zweige testen möchten :Fügen Sie
branches:except
Ihrem.travis.yml
: Direktive hinzu :In dieser Konfiguration:
feature-A
löst den Build auspr.feature-A
löst den Build nicht auspr.feature-A
in der geöffneten Pull-Anforderung verwendet wird, wird der Build ausgelöstWorkflow-Beispiel
wip.feature-A
Jedes Festschreiben für diesen Zweig löst den Build ausmaster
Sie ihn vonwip.feature-A
nach umbenennenpr.feature-A
und die Pull-Anforderung öffnenpr.feature-A
Bei allen oben genannten Schritten wird nur ein Build ausgelöst.
quelle
Für eines der Repositories, mit denen ich gearbeitet habe, wollte ich Folgendes:
Es gibt ein
origin
Repo, das das Haupt-Repo ist, das alle Veröffentlichungen macht.Ich wollte, dass alle Pull-Anfragen, die zum
master
Ursprungszweig kommen, nur einmal mit Travis erstellt werden, unabhängig davon, dass sie von einem gegabelten Repo oder einem anderen Zweig des Ursprungs stammenorigin
.In diesem Fall funktioniert dies wie ein Zauber
if: (type == push) OR (type == pull_request AND fork == true)
quelle