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.

16voto

Dušan Maďar Punkte 8417

tl;dr Verwenden Sie das unter https://docs.travis-ci.com/user/common-build-problems/#troubleshooting-locally-in-a-docker-image angegebene Bild in Kombination mit https://github.com/travis-ci/travis-build#use-as-addon-for-travis-cli.


EDIT 2019-12-06

#troubleshooting-locally-in-a-docker-image Abschnitt wurde durch #running-builds-in-debug-mode ersetzt, der auch beschreibt, wie man SSH zum im Debug-Modus laufenden Job herstellt.

EDIT 2019-07-26

#troubleshooting-locally-in-a-docker-image Abschnitt ist nicht mehr Teil der Dokumentation; hier ist warum

Es ist jedoch immer noch im Git-Verlauf: https://github.com/travis-ci/docs-travis-ci-com/pull/2193.

Suchen Sie nach (ziemlich alten, konnte keine neueren finden) Bildversionen unter: https://travis-ci.org/travis-ci/docs-travis-ci-com/builds/230889063#L661.


Ich wollte überprüfen, warum einer der Tests in meinem Build mit einem Fehler fehlgeschlagen ist, den ich lokal nicht bekommen habe.

Es hat funktioniert.

Was tatsächlich funktioniert hat, war die Verwendung des unter Lokales Troubleshooting in einem Docker-Bild angegebenen Bildes. In meinem Fall war es travisci/ci-garnet:packer-1512502276-986baf0.

Ich konnte travis compile hinzufügen, indem ich die Schritte befolgt habe, die unter https://github.com/travis-ci/travis-build#use-as-addon-for-travis-cli beschrieben sind.

dm@z580:~$ docker run --name travis-debug -dit travisci/ci-garnet:packer-1512502276-986baf0 /sbin/init
dm@z580:~$ docker images
REPOSITORY                       TAG                          IMAGE ID            CREATED             SIZE
travisci/ci-garnet               packer-1512502276-986baf0    6cbda6a950d3        vor 11 Monaten       10.2GB
dm@z580:~$ docker exec -it travis-debug bash -l
root@912e43dbfea4:/# su - travis
travis@912e43dbfea4:~$ cd builds/
travis@912e43dbfea4:~/builds$ git clone https://github.com/travis-ci/travis-build
travis@912e43dbfea4:~/builds$ cd travis-build
travis@912e43dbfea4:~/builds/travis-build$ mkdir -p ~/.travis
travis@912e43dbfea4:~/builds/travis-build$ ln -s $PWD ~/.travis/travis-build
travis@912e43dbfea4:~/builds/travis-build$ gem install bundler
travis@912e43dbfea4:~/builds/travis-build$ bundle install --gemfile ~/.travis/travis-build/Gemfile
travis@912e43dbfea4:~/builds/travis-build$ bundler binstubs travis
travis@912e43dbfea4:~/builds/travis-build$ cd ..
travis@912e43dbfea4:~/builds$ git clone --depth=50 --branch=master https://github.com/DusanMadar/PySyncDroid.git DusanMadar/PySyncDroid
travis@912e43dbfea4:~/builds$ cd DusanMadar/PySyncDroid/
travis@912e43dbfea4:~/builds/DusanMadar/PySyncDroid$ ~/.travis/travis-build/bin/travis compile > ci.sh
travis@912e43dbfea4:~/builds/DusanMadar/PySyncDroid$ sed -i 's,--branch\\=\\\x27\\\x27,--branch\\=master,g' ci.sh
travis@912e43dbfea4:~/builds/DusanMadar/PySyncDroid$ bash ci.sh

Alles aus .travis.yml wurde wie erwartet ausgeführt (Abhängigkeiten installiert, Tests durchgeführt, ...).

Beachten Sie, dass ich vor dem Ausführen von bash ci.sh --branch\=\'\'\ in --branch\=master\ ändern musste (siehe das vorletzte sed -i ... Kommando) in ci.sh.

Wenn das nicht funktioniert, hilft der folgende Befehl, die Zielzeilennummer zu identifizieren, und Sie können die Zeile manuell bearbeiten.

travis@912e43dbfea4:~/builds/DusanMadar/PySyncDroid$ cat ci.sh | grep -in branch
840:    travis_cmd git\ clone\ --depth\=50\ --branch\=\'\'\ https://github.com/DusanMadar/PySyncDroid.git\ DusanMadar/PySyncDroid --echo --retry --timing
889:export TRAVIS_BRANCH=''
899:export TRAVIS_PULL_REQUEST_BRANCH=''
travis@912e43dbfea4:~/builds/DusanMadar/PySyncDroid$

Hat nicht funktioniert.

Ich habe die akzeptierte Antwort für diese Frage befolgt, aber das Bild (travis-ci-garnet-trusty-1512502259-986baf0), das von instance unter https://hub.docker.com/u/travisci/ erwähnt wurde, nicht gefunden.

Der Build worker version verweist auf den travis-ci/worker commit und sein travis-worker-install verweist auf quay.io/travisci/ als Bild-Registry. Also habe ich es versucht.

dm@z580:~$ docker run -it -u travis quay.io/travisci/travis-python /bin/bash
travis@370c23a773c9:/$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.5 LTS
Release:    12.04
Codename:   precise
travis@370c23a773c9:/$
dm@z580:~$ docker images 
REPOSITORY                       TAG                          IMAGE ID            CREATED             SIZE
quay.io/travisci/travis-python   latest                       753a216d776c        vor 3 Jahren         5.36GB

Definitiv nicht Trusty (Ubuntu 14.04) und auch nicht klein.

7voto

Travis Punkte 2599

Sie könnten Trevor ausprobieren, der Docker verwendet, um Ihren Travis-Build auszuführen.

Aus seiner Beschreibung:

Oft müssen Tests für mehrere Versionen von Node.js ausgeführt werden. Aber ich möchte nicht manuell zwischen Versionen wechseln und n/nvm verwenden oder den Code an Travis CI senden, nur um die Tests auszuführen.

Deswegen habe ich Trevor erstellt. Es liest .travis.yml und führt Tests in allen angeforderten Versionen aus, genau wie Travis CI. Jetzt können Sie vor dem Push testen und Ihre Git-History sauber halten.

5voto

Radek Simko Punkte 14814

Ich bin mir nicht sicher, was dein ursprünglicher Grund dafür war, Travis lokal laufen zu lassen, wenn du nur damit spielen wolltest, dann hör jetzt auf zu lesen, da es für dich irrelevant ist.

Wenn du bereits Erfahrung mit dem gehosteten Travis hast und das gleiche Erlebnis in deinem eigenen Rechenzentrum haben möchtest, lies weiter.

Seit Dez 2014 bietet Travis CI eine Enterprise On-Premises-Version an.

http://blog.travis-ci.com/2014-12-19-introducing-travis-ci-enterprise/

Die Preisgestaltung ist ebenfalls Teil des Artikels:

Die Lizenzierung erfolgt pro Sitzplätze, wobei jede Lizenz 20 Benutzer enthält. Die Preise beginnen bei $6.000 pro Lizenz, inklusive 20 Benutzer und 5 gleichzeitigen Builds. Es gibt eine Premium-Option mit unbegrenzten Builds für $8.500.

1voto

Drew Punkte 121

Ich konnte die Antworten hier nicht so verwenden, wie sie sind. Wie bereits erwähnt, wurde das Travis-Hilfsdokument zum lokalen Ausführen von Jobs entfernt. Alle Blog-Einträge und Artikel, die ich gefunden habe, basieren darauf. Der neue "Debug"-Modus spricht mich nicht an, da ich die Wartezeiten und die Travis-Infrastruktur vermeiden möchte, bis ich ein gewisses Vertrauen habe, dass ich mit meinen Änderungen weitergekommen bin.

In meinem Fall aktualisiere ich ein Puppet-Modul und bin kein Experte in Puppet, auch nicht besonders erfahren in Ruby, Travis oder deren Ökosystemen. Aber ich habe es geschafft, ein funktionsfähiges Testimage auf der Grundlage von Tipps und Ideen in diesem Artikel und anderswo zu erstellen und die Travis CI-Build-Logs ziemlich genau zu prüfen.

Ich konnte keine aktuellen Abbilder finden, die den Namen in den CI-Logs entsprechen (zum Beispiel konnte ich travisci/ci-sardonyx finden, aber konnte nichts mit "xenial" oder mit dem gleichen Build-Namen finden). Aus den Logs geht hervor, dass Abbilder jetzt über AMQP anstelle eines mir vertrauteren Mechanismus übertragen werden.

Ich konnte ein Abbild travsci/ubuntu-ruby:16.04 finden, das dem Betriebssystem entspricht, das ich für meinen speziellen Fall anvisiere. Es verfügt nicht über alle Komponenten, die in der Travis CI verwendet werden, also habe ich ein neues auf der Grundlage davon erstellt, mit einigen hinzugefügten Komponenten im Abbild und anderen, die je nach Bedarf im Container zur Laufzeit hinzugefügt werden.

Also kann ich leider kein klares Verfahren anbieten. Aber im Wesentlichen habe ich folgendes gemacht:

  1. Suchen Sie ein aktuelles Travis CI-Abbild im Docker Hub, das Ihrem Zielbetriebssystem so nahe wie möglich kommt.

  2. Klonen Sie das Repository in ein Build-Verzeichnis und starten Sie den Container mit dem als Volume gemounteten Build-Verzeichnis und dem Arbeitsverzeichnis auf das Ziel-Volume gesetzt.

  3. Jetzt die harte Arbeit: Gehen Sie durch das Travis-Build-Log und richten Sie die Umgebung ein. In meinem Fall bedeutete dies das Setup von RVM und dann die Verwendung von bundle zur Installation der Abhängigkeiten des Projekts. RVM schien bereits in der Travis-Umgebung vorhanden zu sein, aber ich musste es installieren; alles andere kam durch das Reproduzieren der Befehle im Build-Log.

  4. Führen Sie die Tests aus.

  5. Wenn die Ergebnisse nicht mit dem übereinstimmen, was Sie in den Travis CI-Logs gesehen haben, gehen Sie zurück zu (3) und sehen Sie, wo Sie hingehen müssen.

  6. Optional: Erstellen Sie ein wiederverwendbares Abbild.

  7. Entwickeln und testen Sie lokal und dann schieben Sie und hoffentlich sind Ihre Travis-Ergebnisse wie erwartet.

Ich weiß, dass dies nicht konkret ist und offensichtlich sein kann, und Ihre Erfahrungen werden sich auf jeden Fall unterscheiden, aber hoffentlich ist dies für jemanden nützlich. Das Dockerfile und ein README für mein Abbild sind auf GitHub als Referenz verfügbar.

0voto

kenorb Punkte 134883

Es ist möglich, über einen Umleitungshost eine SSH-Verbindung zur Travis CI-Umgebung herzustellen. Das Feature ist nicht in Travis CI integriert, aber es kann durch die folgenden Schritte erreicht werden.

  1. Auf dem Umleitungshost erstellen Sie den Benutzer travis und stellen sicher, dass Sie eine SSH-Verbindung dazu herstellen können.

  2. Fügen Sie diese Zeilen im Abschnitt script: Ihrer .travis.yml hinzu (z.B. am Ende).

    - echo travis:$sshpassword | sudo chpasswd
    - sudo sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/' /etc/ssh/sshd_config
    - sudo service ssh restart
    - sudo apt-get install sshpass
    - sshpass -p $sshpassword ssh -R 9999:localhost:22 -o StrictHostKeyChecking=no travis@$bouncehostip

    Wo $bouncehostip die IP/Host Ihres Umleitungshosts ist und $sshpassword Ihr festgelegtes SSH-Passwort ist. Diese Variablen können als verschlüsselte Variablen hinzugefügt werden.

  3. Pushen Sie die Änderungen. Sie sollten eine SSH-Verbindung zu Ihrem Umleitungshost herstellen können.

Quelle: Shell in Travis CI Build-Umgebung.


Hier ist das vollständige Beispiel:

# Verwenden der neuen Container-Infrastruktur
sudo: required
dist: trusty

Sprache: Python
Python: "2.7"

script:
- echo travis:$sshpassword | sudo chpasswd
- sudo sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/' /etc/ssh/sshd_config
- sudo service ssh restart
- sudo apt-get install sshpass
- sshpass -p $sshpassword ssh -R 9999:localhost:22 -o StrictHostKeyChecking=no travisci@$bouncehostip

Sehen Sie: c-mart/travis-shell auf GitHub.


Siehe auch: Wie man eine Travis CI-Build-Umgebung zum Debuggen reproduziert

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