web-dev-qa-db-fra.com

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

Je vois un échec de construction sur travis-ci, que je ne peux pas reproduire sur ma machine locale. Y a-t-il des instructions quelque part pour configurer un VM qui est identique à l'environnement de construction travis-ci linux? Je suis heureux d'avoir travis-ci déjà révélé un nouveau bogue, mais moins excité à déboguer en envoyant des validations qui ajoutent du code de débogage.

61
David Roundy

Pour les versions basées sur des conteneurs, il y a maintenant instructions sur la façon de configurer une image docker localement .

Malheureusement, plusieurs étapes sont encore manuelles. Voici les commandes dont vous avez besoin pour le faire fonctionner:

# change 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 su - 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
travis # to create ~/.travis
ln -s `pwd` ~/.travis/travis-build
bundle install

# Create project dir, assuming your project is `me/project` on GitHub
cd ~/builds
mkdir me
cd me
git clone https://github.com/me/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
40
eregon

Vous pouvez utiliser Travis Build qui est une bibliothèque (ce qui signifie que vous devez la placer dans ~/.travis/) pour générer un script de construction basé sur Shell (travis compile) qui peut ensuite être téléchargé sur les machines virtuelles à l'aide de SSH et exécuté.

Les étapes ci-dessous ne sont que des conseils pour vous mettre sur la bonne voie (s'il manque quelque chose, faites-le moi savoir).

Docker

Exemple de commande pour exécuter le conteneur (qui se trouve sur Docker Hub ):

docker run -it travisci/ubuntu-Ruby:18.04 /bin/bash

Exécutez votre conteneur, clonez votre référentiel puis testez-le manuellement.

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

Accès SSH

Découvrez ceci réponse . Fondamentalement, vous devez configurer l'hôte de rebond, puis configurer votre build pour exécuter le tunnel SSH.

Voici l'exemple .travis.yml:

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

Configuration locale

Voici les étapes pour le tester sur votre environnement local:

cd ~
git clone https://github.com/travis-ci/travis-build.git
ln -s ~/travis-build/ ~/.travis/travis-build
Sudo gem install bundler
bundle install --gemfile ~/.travis/travis-build/Gemfile
cd repo-dir/
travis login -g <github_token>
vim .travis.yaml
travis lint # to validate script
travis compile # to transform into Shell script

Vagrant/VM

Après avoir fait travis compile qui produirait le script bash à la suite de votre .travis.yml, vous pouvez utiliser use vagrant pour exécuter ce script dans un environnement virtualisé à l'aide de Vagrantfile et des étapes suivantes:

vagrant up
vagrant ssh
cd /vagrant
bundle exec rspec spec

Vous devrez probablement installer plus d'outils pour le tester.


Voici un indice git qui vous évite de générer des validations inutiles lors des validations d'essai et d'erreurs pour les tests Travis CI:

  1. Fork le repo (ou utilisez une branche distincte).
  2. Après la validation initiale, continuez d'ajouter --amend pour remplacer votre commit précédent:

    git commit --amend -m 'Same message.' -a
    
  3. Poussez le commit modifié par la force (par exemple dans le PR déjà ouvert):

    git Push fork -f
    
  4. Maintenant, Travis CI revérifierait le même commit encore et encore.


Voir aussi: Comment exécuter travis-ci localement .

12
kenorb

Je fais face au même problème en ce moment. Avant, j'utilisais CircleCI, où vous pouviez simplement vous connecter à VM via ssh, mais cela ne fonctionne pas avec les machines virtuelles Travis-CI.

J'ai pu le déboguer (jusqu'à un certain point) en configurant Travis-ci VM clone via Travis-Cookbooks . Vous devez installer VirtualBox et Vagrant sur votre ordinateur avant de cloner ce référentiel.

Une fois que vous avez cloné Travis-Cookbooks, ouvrez le dossier, lancez la commande Prompt | terminal et tapez vagrant up. Une fois que Vagrant a fini de configurer VM (cela peut prendre un certain temps) sur votre machine, vous pouvez vous y connecter via ssh en exécutant vagrant ssh.

À partir de là, vous devrez cloner votre propre référentiel (ou simplement copier le code sur VM) et appliquer les étapes de votre .travis.yml fichier.

12
Timka

La réponse de l'Eregon a échoué pour moi à travis compile, l'erreur ressemble à ceci:

/home/travis/.rvm/rubies/Ruby-2.3.0/lib/Ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- travis/support (LoadError)

Je l'ai fait fonctionner avec les ajustements suivants: (ajustements marqués avec # CHANGED. J'utilise l'environnement de noeud)

# change the image according to the language chosen in .travis.yml
# Find images at https://quay.io/organization/travisci
docker run -it quay.io/travisci/travis-node-js /bin/bash

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

# Install a recent Ruby (default is 1.9.3) to make bundle install work
rvm install 2.3.0 
rvm use 2.3.0

# Install travis-build to generate a .sh out of .travis.yml
Sudo mkdir builds         # CHANGED
cd builds
Sudo git clone https://github.com/travis-ci/travis-build.git
cd travis-build
gem install travis
travis # to create ~/.travis
ln -s `pwd` ~/.travis/travis-build
bundle install
bundler add travis        # CHANGED
Sudo mkdir bin            # CHANGED
Sudo chmod a+w bin/       # CHANGED
bundler binstubs travis   # CHANGED

# Create project dir, assuming your project is `me/project` on GitHub
cd ~/builds
mkdir me
cd me
git clone https://github.com/me/project.git
cd project
# change to the branch or commit you want to investigate
~/.travis/travis-build/bin/travis compile > ci.sh # CHANGED
# You most likely will need to edit ci.sh as it ignores matrix and env
# In particular I needed to edit --branch=’’ to the branch name
bash ci.sh
3
ario