565 Stimmen

Wie führt man travis-ci lokal aus

Ich würde es lieber vermeiden, jeden kleinen Änderung an .travis.yml und jeder kleinen Änderung, die ich am Quellcode vornehme, zu pushen, um den Build auszuführen. Mit Jenkins können Sie Jenkins herunterladen und lokal ausführen. Bietet Travis so etwas an?

Hinweis: Ich habe das travis-ci cli gesehen und heruntergeladen, aber alles, was es zu tun scheint, ist, ihre API aufzurufen, die dann eine Verbindung zu meinem GitHub-Repo herstellt, also wenn ich nicht pushe, spielt es keine Rolle, dass ich den letzten Build neu starte.

228voto

William Entriken Punkte 33360

Dieser Prozess ermöglicht es Ihnen, jeden Travis-Build-Job vollständig auf Ihrem Computer zu reproduzieren. Außerdem können Sie den Prozess jederzeit unterbrechen und debuggen. Im Folgenden finden Sie ein Beispiel, in dem ich die Ergebnisse von Job #191.1 auf php-school/cli-menu perfekt reproduziere.

Voraussetzungen

  • Sie haben ein öffentliches Repository auf GitHub
  • Sie haben mindestens einen Build auf Travis ausgeführt
  • Sie haben Docker auf Ihrem Computer eingerichtet

Einrichten der Build-Umgebung

Referenz: https://docs.travis-ci.com/user/common-build-problems/

  1. Erstellen Sie Ihre eigene temporäre Build-ID

    BUILDID="build-$RANDOM"
  2. Sehen Sie sich das Build-Protokoll an, öffnen Sie die Schaltfläche "Mehr anzeigen" für INFORMATIONEN ZUM ARBEITER und finden Sie die INSTANCE-Zeile, fügen Sie sie hier ein und führen Sie aus (ersetzen Sie das Tag nach dem Doppelpunkt durch das neueste verfügbare):

    INSTANCE="travisci/ci-garnet:packer-1512502276-986baf0"
  3. Starten Sie den Headless-Server

    docker run --name $BUILDID -dit $INSTANCE /sbin/init
  4. Führen Sie den angefügten Client aus

    docker exec -it $BUILDID bash -l

Führen Sie den Job aus

Jetzt befinden Sie sich in Ihrer Travis-Umgebung. Führen Sie su - travis aus, um zu beginnen.

Dieser Schritt ist gut definiert, aber er ist aufwendiger und manueller. Sie finden jeden Befehl, den Travis in der Umgebung ausführt. Suchen Sie dazu alles in der rechten Spalte, das ein Tag wie 0.03s hat.

Auf der linken Seite sehen Sie die tatsächlichen Befehle. Führen Sie diese Befehle in der angegebenen Reihenfolge aus.

Ergebnis

Jetzt ist ein guter Zeitpunkt, um den Befehl history auszuführen. Sie können den Prozess neu starten und diese Befehle wiederholen, um den gleichen Test gegen einen aktualisierten Code-Stand durchzuführen.

  • Wenn Ihr Repository privat ist: ssh-keygen -t rsa -b 4096 -C "IHRE IN GITHUB REGISTRIERTE E-MAIL" dann cat ~/.ssh/id_rsa.pub und klicken Sie hier, um einen Schlüssel hinzuzufügen
  • FYI: Sie können von innerhalb des Docker mittels git pull Commits von Ihrer Entwicklungsbox laden, bevor Sie sie zu GitHub pushen
  • Wenn Sie die von Travis ausgeführten Befehle ändern möchten, liegt es in Ihrer Verantwortung, herauszufinden, wie sich das in eine funktionierende .travis.yml übersetzt.
  • Ich weiß nicht, wie das bereinigen der Docker-Umgebung funktioniert, es scheint kompliziert zu sein, vielleicht gibt es hier einen Speicherleck

170voto

Scott McLeod Punkte 1889

Travis-ci bietet eine neue containerbasierte Infrastruktur, die Docker verwendet. Dies kann sehr nützlich sein, wenn Sie versuchen, einen travis-ci-Build zu debuggen, indem Sie ihn lokal reproduzieren. Dies stammt aus der Dokumentation von Travis CI.

Problembehandlung vor Ort in einem Docker-Image

Wenn Sie Schwierigkeiten haben, das genaue Problem in einem Build zu identifizieren, hilft es oft, den Build lokal auszuführen. Dazu müssen Sie unsere containerbasierte Infrastruktur verwenden (d. h. sudo: false in Ihrer .travis.yml haben) und wissen, welches Docker-Image Sie in Travis CI verwenden.

Ausführen eines containerbasierten Docker-Images lokal

  1. Laden Sie den Docker Engine herunter und installieren Sie ihn.

  2. Wählen Sie ein Bild von Docker Hub aus. Wenn Sie kein sprachspezifisches Bild verwenden, wählen Sie ci-ruby. Öffnen Sie ein Terminal und starten Sie eine interaktive Docker-Sitzung mit der Bild-URL:

    docker run -it travisci/ubuntu-ruby:18.04 /bin/bash
  3. Wechseln Sie zum Benutzer travis:

    su - travis
  4. Klonen Sie Ihr Git-Repository in den Ordner / des Images.

  5. Installieren Sie manuell alle Abhängigkeiten.

  6. Führen Sie Ihren Travis CI Build-Befehl manuell aus.

89voto

William Entriken Punkte 33360

UPDATE: Ich habe jetzt eine komplette schlüsselfertige, alles in einem Antwort, siehe https://stackoverflow.com/a/49019950/300224. Es hat nur 3 Jahre gedauert, um es herauszufinden!

Laut der Travis-Dokumentation: https://github.com/travis-ci/travis-ci gibt es eine Mischung von Projekten, die zusammenarbeiten, um den Travis CI-Webdienst zu liefern, den wir kennen und lieben. Der folgende Teil von Projekten scheint es zu ermöglichen, die lokale make test-Funktionalität unter Verwendung der .travis.yml in Ihrem Projekt zu nutzen:

travis-build

travis-build erstellt das Build-Skript für jeden Job. Es nimmt die Konfiguration aus der .travis.yml-Datei und erstellt ein bash-Skript, das dann in der Build-Umgebung von travis-worker ausgeführt wird.

travis-cookbooks

travis-cookbooks enthält die Chef-Kochbücher, die zum Einrichten der Build-Umgebungen verwendet werden.

travis-worker

travis-worker ist dafür verantwortlich, die Build-Skripte in einer sauberen Umgebung auszuführen. Es streamt die Protokollausgabe an travis-logs und sendet Statusaktualisierungen (Build-Starten/Beenden) an travis-hub.

(Die anderen Teilprojekte sind für die Kommunikation mit GitHub, ihre Web-Benutzeroberfläche, E-Mails und ihre API verantwortlich.)

24voto

eregon Punkte 1466

Ähnlich wie bei Scott McLeod, jedoch generiert dies auch ein Bash-Skript, um die Schritte aus der .travis.yml auszuführen.

Problembehandlung lokal in Docker mit einem generierten Bash-Skript

# Wählen Sie das Image entsprechend der im .travis.yml gewählten Sprache aus
$ docker run -it -u travis quay.io/travisci/travis-jvm /bin/bash

# Jetzt, da Sie im Docker-Image sind, wechseln Sie zum travis-Benutzer
sudo - travis

# Installieren Sie ein aktuelles Ruby (Standard ist 1.9.3)
rvm install 2.3.0
rvm use 2.3.0

# Installieren Sie travis-build, um aus der .travis.yml eine .sh zu generieren
cd builds
git clone https://github.com/travis-ci/travis-build.git
cd travis-build
gem install travis
# um ~/.travis zu erstellen
travis version
ln -s `pwd` ~/.travis/travis-build
bundle install

# Erstellen Sie das Projektverzeichnis, angenommen, Ihr Projekt ist `AUTHOR/PROJECT` auf GitHub
cd ~/builds
mkdir AUTHOR
cd AUTHOR
git clone https://github.com/AUTHOR/PROJECT.git
cd PROJECT
# wechseln Sie zum Zweig oder Commit, den Sie untersuchen möchten
travis compile > ci.sh
# Sie müssen wahrscheinlich ci.sh bearbeiten, da es Matrix und Umgebung ignoriert
bash ci.sh

16voto

grosser Punkte 14107

Verwenden Sie das wwtd (what would travis do) Ruby-Gem, um Tests auf Ihrem lokalen Rechner auszuführen, grob so, wie sie auf Travis ausgeführt würden.

Es wird die Build-Matrix neu erstellen und jede Konfiguration ausführen, toll um das Setup vor dem Pushen zu überprüfen.

gem i wwtd
wwtd

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X