Eine Travis-CI-Neuerstellung auslösen, ohne ein Commit zu drücken?

414

Ist es mit Travis-CI möglich, eine Neuerstellung auszulösen, ohne ein neues Commit für GitHub zu erstellen?

Anwendungsfall: Ein Build schlägt aufgrund einer Externalität fehl. Die Quelle ist tatsächlich korrekt. Es würde OK bauen und bestehen, wenn es einfach erneut ausgeführt würde.

Ein Fehler tritt beispielsweise auf, apt-getweil ein Paketserver ausgefallen ist, der Server jedoch wieder gesichert ist. Der Build-Status bleibt jedoch bei "fehlgeschlagen" "hängen", bis ein neues Commit gepusht wird.

Gibt es eine Möglichkeit, Travis-CI zu einem anderen Build zu bewegen, als ein "Dummy" -Commit durchzuführen?

Greg Hendershott
quelle

Antworten:

458
  • Wenn Sie Schreibzugriff auf das Repo haben : Auf dem Detailbildschirm des Builds befindet sich eine Schaltfläche ↻ Build neu starten . Auch unter "Weitere Optionen" gibt es einen Trigger Build Menüpunkt.

    Hinweis : Browser-Erweiterungen wie Ghostery verhindern möglicherweise, dass die Schaltfläche zum Neustart angezeigt wird. Deaktivieren Sie die Erweiterung oder die weiße Liste von Travis CI.

    Hinweis 2 : Wenn sich die .travis.ymlKonfiguration im Upstream geändert hat, wird Travis durch Klicken auf die Schaltfläche "Neu erstellen" mit der alten Konfiguration ausgeführt. Um vorgelagerte Änderungen für die Travis-Konfiguration anzuwenden, muss ein Commit zu PR hinzugefügt oder geschlossen / erneut geöffnet werden.

  • Wenn Sie eine Pull-Anfrage gesendet haben : Sie können den PR schließen und dann wieder öffnen . Dies löst einen neuen Build aus.

Build neu starten:

Starten Sie den Build-Screenshot neu

Trigger Build:

Bildschirm-Shot auslösen

jbtule
quelle
1
Ich habe das in anderen Fällen gefunden und benutzt. Aber ich hätte schwören können, dass ich einen Fall hatte, in dem er aus dem oben beschriebenen Grund fehlerhaft war, und dem Gangmenü fehlte diese Option. Vielleicht war das ein einmaliger Zufall, oder vielleicht habe ich mich geirrt. Wie auch immer, ich glaube , Sie antwortete , wie es soll an die Arbeit, so dass ich weitermachen werde und deine Antwort markieren als angenommen. Vielen Dank!
Greg Hendershott
3
Wenn ich mir den Build-Verlauf eines meiner Projekte ansehe, das fehlerhaft oder fehlgeschlagen ist, hat es eine Schaltfläche
jbtule
20
Ich denke, ein schwieriger Fall ist, dass Sie eine Pull-Anfrage für das Projekt eines anderen einreichen und diese aus Gründen fehlerhaft ist, die nicht mit Ihrer PR per se zusammenhängen, und Sie wissen, dass es erfolgreich sein würde, wenn Sie sie einfach anstoßen könnten, um es erneut zu versuchen. Es ist verständlich, warum Sie nicht können (nicht Ihr Projekt) - aber auch verständlich, warum Sie möchten (Ihre PR sieht fälschlicherweise "schlecht aus").
Greg Hendershott
94
Vergessen Sie nicht, dass Sie angemeldet sein müssen, um dies zu sehen: P
Michael J. Calkins
8
Und Sie müssen Schreibzugriff auf den Github-Repro haben. Dies funktioniert also nicht für Gabeln, die stromaufwärts geschoben werden.
Izhaki
206

Wenn Sie die Registerkarte Einstellungen für das Repository auf GitHub öffnen , auf Integrationen und Dienste klicken , Travis CI suchen und auf Bearbeiten klicken , sollte die Schaltfläche Testdienst angezeigt werden. Dies löst einen Build aus.

Aaron Hill
quelle
6
Ich denke, Travis-CI hat den Neustart-Build-Button entfernt, also ist dies der einzige Weg, der für mich richtig funktioniert hat. Es führt jedoch zwei Builds durch…
Blaise
1
@Blaise verwenden Sie zufällig Ghostery (oder ähnliches)? Versuchen Sie das zu deaktivieren. Für mich wird dadurch die Schaltfläche "Build neu starten" erneut angezeigt.
Greg Hendershott
29
Dies funktioniert, wenn Sie das Travis CI-Gebäude zum ersten Mal für ein Repo aktivieren. Die Schaltfläche "Build neu laden" ist für ein Repo ohne vorherige Builds nicht vorhanden.
Brian J. Miller
12
Ein Hinweis für Idioten wie mich: Öffnen Sie Settingsim Repository auf Github , nicht auf Travis 'Repo-Seite! Ich kann nicht glauben, dass ich 20 Minuten damit verbracht habe, Service Hooksauf Travis 'Seite zu finden . :(
John Red
83

Ich weiß, dass Sie gesagt haben, ohne ein Commit zu drücken, aber etwas, das praktisch ist, wenn Sie an einem anderen Zweig als dem Master arbeiten, ist das Festschreiben eines leeren Commits.

git commit --allow-empty -m "Trigger"

Sie können am Ende neu gründen und Squash entfernen / die leeren Commits entfernen und funktioniert über alle Git-Hooks hinweg :)

jasonmit
quelle
1
Das ist genial, danke! Ich möchte nur hinzufügen, dass ich neu gründen musste, um das Commit "Trigger" weiter unten in der Geschichte zu verschieben. Andernfalls wird der neue Build beim Entfernen des Commits "Trigger" einfach verworfen.
pmos
63
In der gleichen Weise können Sie das vorhandene Commit ändern und Push erzwingen: git commit --amend --no-edit && git push -f
grahamrhay
4
@grahamrhay, das ist das Beste, um einen PR-Build auszulösen, wenn Sie nicht der Eigentümer des Ziel-Repos sind. Es behält den Inhalt bei, ohne dass Sie zusammenführen, neu gründen oder irgendetwas tun müssen. Bitte geben Sie eine Antwort, damit Sie sie sichtbarer bewerten können.
TWiStErRob
Ich habe ein Repository gespalten, auf das ich keinen Zugriff hatte, und dies war das einzige, was für mich funktioniert hat, da Travis keine Builds hatte, die ich auf meiner neu erstellten Gabel neu starten konnte.
Nick McCurdy
1
@TWiStErRob Jemand anderes hat unten eine solche Antwort geschrieben.
Franklin Yu
30

Ich habe einen anderen Weg gefunden, um CI-Builds und andere Trigger erneut auszuführen:

  1. Führen Sie git commit --amend --no-editohne Änderungen. Dadurch wird das letzte Commit in der aktuellen Verzweigung neu erstellt.
  2. git push --force-with-lease origin pr-branch.
Vlad Frolov
quelle
8
Ich würde das nicht empfehlen. Es ändert den Verlauf destruktiv, sodass Personen verwirrt werden können, deren Verzweigungen auf diesem Commit basieren, und das --amendFlag kann das HEADCommit in einigen Fällen auch nicht ändern .
Nick McCurdy
7
Ich finde es gut für die seltenen Fälle, in denen Sie nur BUMP-Webhooks für eine PR benötigen. Niemand sollte wirklich aus Pull-Anfragen heraus verzweigen, daher wird sich niemand auf die genaue Commit-ID verlassen.
Vlad Frolov
4
Gehen Sie für, git push --force-with-lease origin pr-branchdamit Sie nicht versehentlich die Änderungen eines anderen
nuklearisieren
21

Melden Sie sich bei Travis an und gehen Sie zur Build-Seite. In der oberen rechten Ecke neben dem Zahnradsymbol wird die Schaltfläche "Build neu starten" angezeigt:

screengrab

Hinweis: Sie benötigen Schreibzugriff auf das verknüpfte GitHub-Repo, damit dies funktioniert.

Juan
quelle
11
Diese Antwort ist im Grunde die gleiche wie die angenommene und wurde viel später eingereicht.
Dan Dascalescu
5
@ DanDascalescu Es gab keinen Screenshot, als ich gepostet habe. Und erst jetzt wird mir klar, dass Sie die Antwort eines anderen bearbeiten können! ;)
Juan
1
@Juan Sie können diese Antwort immer noch löschen, was ich vorschlage, da es unnötige Unordnung hinzufügt.
Rafal endet
20

Wenn Sie ein neues Projekt auf GitHub haben, das .travis.yml enthält, aber nie getestet wurde, können Sie Tests ohne Commit auf folgende Weise ausführen:

  1. Aktivieren Sie das Testen in Travis CI-Einstellungen
  2. Projektseite auf GitHub öffnen
  3. Einstellungen öffnen -> Webhooks und Dienste
  4. Suchen Sie Travis CI in den Diensten und klicken Sie auf die Schaltfläche Bearbeiten
  5. Drücken Sie "Test Service"
Lampensklave
quelle
3
Dies ist die Antwort für diejenigen mit neu erstellten Projekten.
Eric MORAND
16

Sie können dies mit der Travis CLI tun . Installieren Sie wie in der Dokumentation beschrieben zuerst das CLI-Tool und dann:

travis login --org --auto
travis token

Sie können dieses Token in einer Umgebungsvariablen aufbewahren TRAVIS_TOKEN, solange die Datei, in der Sie es aufbewahren, nicht an einem öffentlichen Ort versioniert ist.

Ich benutze diese Funktion, um Trigger zu senden:

function travis_trigger() {
     local org=$1 && shift
     local repo=$1 && shift
     local branch=${1:-master} && shift

     body="{
             \"request\": {
               \"branch\": \"${branch}\"
              }
           }"

     curl -s -X POST \
          -H "Content-Type: application/json" \
          -H "Accept: application/json" \
          -H "Travis-API-Version: 3" \
          -H "Authorization: token $TRAVIS_TOKEN" \
          -d "$body" \
          "https://api.travis-ci.org/repo/${org}%2F${repo}/requests"
 }
Sam Brightman
quelle
Sie können Ihren eigenen Travis-Build für Ihre Gabel einrichten.
Sam Brightman
Sie können den Zweig Ihrer Gabel erstellen, von dem aus die Pull-Anforderung erfolgt.
Sam Brightman
Der Zweig Ihrer PR und der PR sind im Wesentlichen dasselbe, oder? Wenn Upstream andere Änderungen vorgenommen hat, seit Sie die PR erstellt haben, müssen Sie sie neu starten, um 100% sicher zu sein. Aber das müsste sowieso passieren, und GitHub sollte eine Rebase-Schaltfläche in der Benutzeroberfläche anzeigen, die in diesem Fall einen neuen Build der PR auslösen würde.
Sam Brightman
11

Travis bietet jetzt eine Möglichkeit, einen "benutzerdefinierten" Build über die Web-Benutzeroberfläche auszulösen. Suchen Sie rechts oben auf der Seite Ihres Projekts nach der Menüschaltfläche "Weitere Optionen".

Weitere Optionen → Trigger Build

Daraufhin wird ein Dialogfeld angezeigt, in dem Sie den Zweig auswählen und die Konfiguration anpassen können:

Dialogfeld "Benutzerdefinierte Erstellung"

Zum Zeitpunkt, an dem ich dies schreibe, befindet es sich in der Beta-Phase und scheint etwas fehlerhaft zu sein (aber ich gehe davon aus, dass die Probleme bald behoben werden).

Bilderstürmer
quelle
2
Vielen Dank. Für mich ist dies die beste Antwort, da ein Trigger-Build auch die ID des Builds ändert, nicht mit einem einfachen Neuaufbau (über die Schaltfläche). Wenn Sie Travis 'ID in Ihren Skripten verwenden, ist es wichtig zu wissen.
Karima Rafes
2
Dies muss höher sein
Gillespie
8

Wenn Sie den Travis CI-Client installieren , können Sie travis restart <job#>einen Build manuell über die Konsole erneut ausführen. Sie können die letzte Jobnummer für einen Zweig mit findentravis show <branch>

travis show master
travis restart 48 #use Job number without .1
travis logs master

Travis CI Client

UPDATE: Leider sieht es so aus, als würde ein neuer Build nicht mit dem neuesten Commit gestartet, sondern nur ein vorheriger Build mit dem vorherigen Status des Repos neu gestartet.

Greg Bray
quelle
Ich verstehe den Update-Hinweis nicht. Über den Befehl können Sie anscheinend definieren, welcher Job neu gestartet werden soll. Die Frage ist also im Begriff, einen Job auszulösen. Vermutlich möchten die meisten Leute dies tun, wenn ihr Commit bereits ausgelöst wurde, aber sie möchten es erneut testen, um ... Oh, ich denke, Sie können Commit-Verzweigungsauslöser nicht deaktivieren und HEAD manuell erstellen.
Redanimalwar
@redanimalwar Ein häufiger Anwendungsfall ist das Erzwingen eines CI-Builds, wenn Änderungen nicht erkannt werden oder sich in einer ruhigen Phase befindet.
Sam Brightman
4

Ich sollte hier erwähnen, dass wir jetzt die Möglichkeit haben, einen neuen Build im Web auszulösen. Weitere Informationen finden Sie unter https://blog.travis-ci.com/2017-08-24-trigger-custom-build .

TL; DR Klicken Sie auf "Weitere Optionen" und wählen Sie "Trigger Build".

Banzaiman
quelle
Dies funktioniert nicht, wenn Sie keinen Schreibzugriff / Colaborator auf das Repository haben und den Build für Ihre eigene Pull-Anforderung erneut ausführen möchten. Ich sehe diese Option nicht. Und wenn Sie die Travis CLI ausprobieren, heißt es, build #xxxx has been restarted aber wenn Sie auf die Webseite schauen, sehen Sie keinen Build
Bitek
3

Wenn der Build nie stattgefunden hat (möglicherweise wurde der Pull-Request-Build-Schalter nicht rechtzeitig aktiviert), können Sie den Pull-Request auf Github als geschlossen markieren und dann als geöffnet markieren. Ein neuer Build wird ausgelöst.

Viperguynaz
quelle
1

Ich habe gerade die Tests für eine Pull-Anforderung ausgelöst, die erneut ausgeführt werden soll, indem ich hier auf "Zweig aktualisieren" geklickt habe: Github Check Tests Komponente

Frazer Kirkman
quelle
1

Folgendes hat für mich funktioniert, um eine Neuerstellung einer PR auszulösen, die Dependabot geöffnet hatte, aber aufgrund von Fehlern in fehlgeschlagen ist .travis.yml:

  1. Schließen Sie die PR
  2. Warten Sie, bis Dependabot einen Kommentar abgegeben hat ("OK, ich werde Sie nicht erneut über diese Version benachrichtigen, sondern mich mit Ihnen in Verbindung setzen, sobald eine neue Version verfügbar ist."). Es wird seinen Zweig entfernen.
  3. Stellen Sie den Zweig wieder her, den Dependabot entfernt hat (so etwas wie dependabot/cargo/tempfile-3.0.4).
  4. Öffnen Sie die PR erneut
Grooveplex
quelle
1

Bitte stellen Sie sicher, Anmelden zuerst Travis. Die Schaltfläche zum Wiederherstellen wird erst angezeigt, wenn Sie angemeldet sind. Ich weiß, dass dies offensichtlich ist, aber jemand hat auch nur darauf gestolpert ;-)

Dinvlad
quelle
0

Manchmal kommt es vor, dass der Server einige Fehler gemacht hat. Versuchen Sie, sich abzumelden / anzumelden, und dann könnte alles in Ordnung sein. (Ja, es ist mir heute Nachmittag passiert.)

XenoAmess
quelle
-1

Schließen Sie einfach den PR und öffnen Sie ihn erneut, wenn Sie keinen Schreibzugriff haben.

Punit Naik
quelle
Nein, BITTE hinterlassen Sie keine Müllabfuhranfragen, es ist ärgerlich. Schieben Sie einfach neue Commits in Ihren Zweig (zum Beispiel können Sie das Commit-Datum ändern: git commit --amend --date = now && git push -f).
Intgr