Was sind die Unterschiede zwischen den Optionen {before _,} {install, script} .travis.yml?

81

Innerhalb der .travis.ymlKonfigurationsdatei , was ist der praktische Unterschied zwischen before_install, install, before_scriptund scriptOptionen?

Ich habe keine Dokumentation gefunden, die die Unterschiede zwischen diesen Optionen erklärt.

Daniele Orlando
quelle
20
Ja, und bis auf den Unterschied zwischen „fehlerbehafteten“ und „nicht bestanden“, gibt es keine Erklärung für das, was ist der Unterschied zwischen before_install, installund before_script.
Daniele Orlando

Antworten:

74

Sie müssen diese Abschnitte nicht verwenden, aber wenn Sie dies tun, teilen Sie die Absicht mit, was Sie tun:

before_install:
  # execute all of the commands which need to be executed 
  # before installing dependencies
  - composer self-update
  - composer validate

install:
  # install all of the dependencies you need here
  - composer install --prefer-dist

before_script:
  # execute all of the commands which need to be executed 
  # before running actual tests
  - mysql -u root -e 'CREATE DATABASE test'
  - bin/doctrine-migrations migrations:migrate

script:
  # execute all of the commands which 
  # should make the build pass or fail
  - vendor/bin/phpunit
  - vendor/bin/php-cs-fixer fix --verbose --diff --dry-run

Siehe zum Beispiel https://github.com/localheinz/composer-normalize/blob/0.8.0/.travis.yml .

localheinz
quelle
2
Ich verstehe immer noch nicht, warum in docs.travis-ci.com/user/docker der docker buildBefehl auf before_installSchritt gesetzt wird. Sollte es nicht im installGleichschritt sein?
Pahlevi Fikri Auliya
@PahleviFikriAuliya Soweit ich es im Kontext des Beispiels verstehe, docker buildwird es zum Einrichten der Testumgebung verwendet. Wenn dies erforderlich ist, bevor Abhängigkeiten installiert werden können, ist es sinnvoll, dies in den before_installAbschnitt zu verschieben, andernfalls before_scriptwürde der Abschnitt dies möglicherweise tun angemessener sein. Wenn ich mir docs.travis-ci.com/user/languages/ruby/#Bundler anschaue, verstehe ich, dass Docker für die Installation von Abhängigkeiten nicht erforderlich sein sollte.
localheinz
23

Der Unterschied liegt im Zustand des Jobs, wenn etwas schief geht.

Git 2.17 (Q2 2018) zeigt, dass in Commit 3c93b82 (08. Januar 2018) von SZEDER Gábor ( szeder) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit c710d18 , 08. März 2018)

Das zeigt den praktischen Unterschied zwischen before_install, install, before_scriptund scriptOptionen

travis-ci: Git während der ' script' Phase erstellen

Seit wir Git auf Travis CI erstellen und testen ( 522354d : Travis CI-Unterstützung hinzufügen, 27.11.2015, Git v2.7.0-rc0), erstellen wir Git in der before_scriptPhase ' ' und führen die Testsuite in der Phase ' script' aus. Phase (außer in den später eingeführten 32-Bit-Linux- und Windows-Build-Jobs, in denen wir in der scriptPhase bauen)).

Im Gegensatz dazu besteht die Travis CI-Praxis darin, in der scriptPhase zu bauen und zu testen . In der Tat lautet der Standard-Build-Befehl von Travis CI für die scriptPhase ' ' von C / C ++ - Projekten:

./configure && make && make test

Der Grund, warum Travis CI dies so macht und warum es ein besserer Ansatz als unser ist, liegt darin, wie erfolglose Build-Jobs kategorisiert werden. Nachdem bei einem Build-Job ein Fehler aufgetreten ist, kann der Status wie folgt lauten:

  • 'fehlgeschlagen' , wenn ein Befehl in der scriptPhase ' ' einen Fehler zurückgegeben hat.
    Dies wird durch ein rotes "X" auf der Travis CI-Weboberfläche angezeigt.

  • 'fehlerhaft' , wenn ein Befehl in der Phase ' before_install', ' install' oder ' before_script' einen Fehler zurückgegeben hat oder der Build-Job das Zeitlimit überschritten hat.
    Dies wird als rotes '!' auf der Weboberfläche.

Dies erleichtert es sowohl Menschen, die sich die Travis CI-Weboberfläche ansehen, als auch automatisierten Tools, die die Travis CI-API abfragen, zu entscheiden, wann ein nicht erfolgreicher Build in unserer Verantwortung liegt und menschliche Aufmerksamkeit erfordert, dh wenn ein Build-Job aufgrund eines Compilers "fehlgeschlagen" ist Fehler oder ein Testfehler, und wenn er durch etwas verursacht wird, das außerhalb unserer Kontrolle liegt und möglicherweise durch einen Neustart des Build-Jobs behoben wird, z. B. wenn ein Build-Job "fehlerhaft" ist, weil eine Abhängigkeit aufgrund eines vorübergehenden Netzwerkfehlers nicht installiert werden konnte oder weil der Der OSX-Build-Job hat sein Zeitlimit überschritten.

Der Nachteil beim Erstellen von Git in der ' before_script' -Phase besteht darin, dass auch das Ablaufverfolgungsprotokoll aller 'fehlerhaften' Build-Jobs überprüft werden muss, um festzustellen, was den Fehler verursacht hat, da er möglicherweise durch einen Compilerfehler verursacht wurde.
Dies erfordert zusätzliche Klicks und Seitenladevorgänge auf der Weboberfläche sowie zusätzliche Komplexität und API-Anforderungen in automatisierten Tools.

Verschieben Sie daher das Erstellen von Git von der before_scriptPhase ' ' in die Phase ' script' und aktualisieren Sie auch den Namen des Skripts entsprechend.
' ci/run-builds.sh' wird jetzt im Grunde leer, entfernen Sie es.
Einige unserer Build-Job-Konfigurationen überschreiben unsere Standardeinstellung, before_scriptum nichts zu tun. Mit dieser Änderung wird auch unsere Standardeinstellung ' before_script' nichts tun. Entfernen Sie daher auch diese überschreibenden Anweisungen.

VonC
quelle