web-dev-qa-db-fra.com

Comment exécuter travis-ci localement

Je viens de rejoindre un projet et je suis nouveau sur Travis-ci. Je préférerais ne pas avoir à appliquer chaque petit changement à .travis.yml et à chaque petit changement apporté à la source afin d'exécuter la compilation. Avec Jenkins, vous pouvez télécharger des jenkins et les exécuter localement. Travis offre-t-il quelque chose comme ça?

Remarque: j'ai vu et téléchargé le fichier travis-ci, mais tout ce qu'il semble faire, c'est d'appeler leur API, qui se connecte ensuite à mon dépôt github. Par conséquent, si je n'effectue pas de Push, le redémarrage n'aura pas d'importance la dernière construction.

459
Sam Hammamy

Ce processus vous permet de reproduire complètement tout travail de construction Travis sur votre ordinateur. En outre, vous pouvez interrompre le processus à tout moment et déboguer. Voici un exemple où je reproduis parfaitement les résultats de job # 191.1 sur php-school/cli-men .

Conditions préalables

  • Vous avez repo publique sur GitHub
  • Vous avez exécuté au moins un build sur Travis
  • vous avez Docker installé sur votre ordinateur

Configurer l'environnement de construction

Référence: https://docs.travis-ci.com/user/common-build-problems/

  1. Créez votre propre ID de build temporaire

    BUILDID="build-$RANDOM"
    
  2. Voir le journal de construction , ouvrez le bouton Afficher plus pour INFORMATION DU TRAVAILLEUR et recherchez la ligne INSTANCE, collez-le ici et exécutez-le (remplacez la balise après le signe deux-points avec la plus récente disponible) :

    INSTANCE="travisci/ci-garnet:packer-1512502276-986baf0"
    
  3. Exécuter le serveur sans tête

    docker run --name $BUILDID -dit $INSTANCE /sbin/init
    
  4. Exécuter le client attaché

    docker exec -it $BUILDID bash -l
    

Exécuter le travail

Vous êtes maintenant dans votre environnement Travis. Exécutez su - travis pour commencer.

Cette étape est bien définie mais plus fastidieuse et manuelle. Vous trouverez toutes les commandes exécutées par Travis dans l'environnement. Pour ce faire, recherchez tout ce qui se trouve dans la colonne de droite avec une balise comme 0.03s.

Sur le côté gauche, vous verrez les commandes réelles. Exécutez ces commandes dans l'ordre.

Résultat

Le moment est venu d’exécuter la commande history. Vous pouvez redémarrer le processus et rejouer ces commandes pour exécuter le même test sur une base de code mise à jour.

  • Si votre référentiel est privé: ssh-keygen -t rsa -b 4096 -C "YOUR EMAIL REGISTERED IN GITHUB" alors cat ~/.ssh/id_rsa.pub et cliquez ici pour ajouter une clé
  • FYI: vous pouvez git pull depuis le menu fixe pour charger les validations depuis votre boîte de dev avant de les envoyer à GitHub.
  • Si vous souhaitez modifier les commandes exécutées par Travis, il est de VOTRE responsabilité de déterminer comment cela se traduit par un .travis.yml fonctionnel.
  • Je ne sais pas comment nettoyer l'environnement Docker, ça a l'air compliqué, peut-être que ça fuit de la mémoire
155
William Entriken

Travis-ci offre une nouvelle infrastructure basée sur les conteneurs qui utilise docker. Cela peut être très utile si vous essayez de dépanner une construction travis-ci en la reproduisant localement. Ceci est tiré de CI Travis documentation .

Dépannage local dans une image Docker

Si vous rencontrez des difficultés pour localiser le problème exact dans une version, il est souvent utile de l'exécuter localement. Pour ce faire, vous devez utiliser notre infrastructure basée sur les conteneurs (c.-à-d. Avoir Sudo: false dans votre .travis.yml) et savoir quelle image Docker vous utilisez sur Travis CI.

Exécution locale d'une image Docker basée sur un conteneur

  1. Téléchargez et installez le Docker Engine .
  2. Sélectionnez une image parmi Docker Hub . Si vous n'utilisez pas d'image spécifique à une langue, sélectionnez ci-Ruby. Ouvrez un terminal et démarrez une session Docker interactive à l'aide de l'URL de l'image:

    docker run -it travisci/ubuntu-Ruby:18.04 /bin/bash
    
  3. Basculez vers l'utilisateur travis:

    su - travis
    
  4. Clonez votre référentiel git dans le dossier / de l'image.
  5. Installez manuellement les dépendances.
  6. Exécutez manuellement votre commande de génération de Travis CI.
155
Scott McLeod

UPDATE: J'ai maintenant une réponse clé en main complète, tout-en-un, voir https://stackoverflow.com/a/49019950/300224 . Cela n'a pris que 3 ans pour comprendre!

Selon la documentation Travis: https://github.com/travis-ci/travis-ci , il existe un ensemble de projets qui concourent à la fourniture du service Web Travis CI que nous connaissons et aimons. Le sous-ensemble de projets suivant semble autoriser les fonctionnalités locales make test à l'aide de .travis.yml dans votre projet:

travis-build

travis-build crée le script de construction pour chaque travail. Il prend la configuration à partir du fichier .travis.yml et crée un script bash qui est ensuite exécuté dans l'environnement de construction par travis-worker.

livres de cuisine travis

travis-cookbooks contient les livres de recettes Chef utilisés pour approvisionner les environnements de construction.

travis-travailleur

travis-worker est responsable de l’exécution des scripts de construction dans un environnement propre. Il diffuse la sortie du journal dans travis-logs et envoie les mises à jour d'état (construction de démarrage/finition) à travis-hub.

(Les autres sous-projets sont responsables de la communication avec GitHub, de leur interface Web, de la messagerie électronique et de leur API.)

83
William Entriken

Similaire à Scott McLeod, mais cela génère également un script bash pour exécuter les étapes à partir du fichier .travis.yml.

Dépannage local dans Docker avec un script Bash généré

# choose the image according to the language chosen in .travis.yml
$ docker run -it -u travis quay.io/travisci/travis-jvm /bin/bash

# now that you are in the docker image, switch to the travis user
Sudo - travis

# Install a recent Ruby (default is 1.9.3)
rvm install 2.3.0
rvm use 2.3.0

# Install travis-build to generate a .sh out of .travis.yml
cd builds
git clone https://github.com/travis-ci/travis-build.git
cd travis-build
gem install travis
# to create ~/.travis
travis version
ln -s `pwd` ~/.travis/travis-build
bundle install

# Create project dir, assuming your project is `AUTHOR/PROJECT` on GitHub
cd ~/builds
mkdir AUTHOR
cd AUTHOR
git clone https://github.com/AUTHOR/PROJECT.git
cd PROJECT
# change to the branch or commit you want to investigate
travis compile > ci.sh
# You most likely will need to edit ci.sh as it ignores matrix and env
bash ci.sh
20
eregon

Utilisez wwtd (que travis ferait-il) Ruby gem pour exécuter des tests sur votre machine locale à peu près comme ils le seraient sur travis.

Il va recréer la matrice de construction et exécuter chaque configuration, ce qui est un excellent moyen de vérifier la configuration avant de lancer.

gem i wwtd
wwtd
14
grosser

Je ne sais pas quelle était la raison initiale pour laquelle vous avez utilisé Travis localement, si vous venez voulez jouer avec, arrêtez de lire ici car cela n'a aucune importance pour vous.

Si vous avez déjà une expérience avec Travis hébergé et que vous souhaitez obtenir la même expérience dans votre propre centre de données, lisez la suite.

Depuis Dec 2014 , Travis CI propose une version d'entreprise sur site.

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

La tarification fait également partie de l'article:

La licence se fait par siège, chaque licence comprenant 20 utilisateurs. Le prix commence à 6 000 USD par licence, ce qui inclut 20 utilisateurs et 5 versions simultanées. Il existe une option premium avec builds illimités pour 8 500 $.

6
Radek Simko

Vous pouvez essayer Trevor , qui utilise Docker pour exécuter votre build Travis.

De sa description:

J'ai souvent besoin d'exécuter des tests pour plusieurs versions de Node.js. Mais je ne veux pas changer de version manuellement en utilisant n/nv ou Transférer le code dans Travis CI uniquement pour exécuter les tests.

C'est pourquoi j'ai créé Trevor. Il lit .travis.yml et exécute des tests dans toutes les versions que vous avez demandées, comme Travis CI. Maintenant, vous pouvez tester avant Push et garder votre historique git propre.

4
Travis

Il est possible de passer de SSH à l’environnement Travis CI via un hôte de rebond. La fonctionnalité n'est pas intégrée à Travis CI, mais vous pouvez y parvenir en procédant comme suit.

  1. Sur l'hôte de rebond, créez l'utilisateur travis et assurez-vous que vous pouvez le faire en SSH.
  2. Placez ces lignes dans la section script: de votre .travis.yml (par exemple, à la fin).

    - 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
    

    $bouncehostip est l'adresse IP/l'hôte de votre hôte de rebond et $sshpassword est votre mot de passe SSH défini. Ces variables peuvent être ajoutées en tant que variables cryptées .

  3. Poussez les changements. Vous devriez pouvoir établir une connexion SSH avec votre hôte de rebond.

Source: Shell dans l'environnement de construction Travis CI .


Voici l'exemple complet:

# use the new container infrastructure
Sudo: required
dist: trusty

language: 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

Voir: c-mart/travis-Shell sur GitHub .


Voir aussi: Comment reproduire un environnement de construction travis-ci pour le débogage

0
kenorb