Jak uruchomić travis-ci lokalnie

Właśnie dołączyłam do projektu i jestem nowa w travis-ci. Wolałbym nie zmuszać każdej małej zmiany do .travis.yml i każdej małej zmiany, którą wprowadzam do źródła, aby uruchomić kompilację. Dzięki jenkins możesz pobrać jenkins i uruchomić go lokalnie. Czy travis oferuje coś takiego?

Uwaga: widziałem travis-ci cli i pobrałem go, ale wszystko wydaje się do zrobienia jest wywołanie ich API, które następnie łączy się z moim GitHub repo, więc jeśli Nie naciskam, nie będzie miało znaczenia, że uruchom ponownie ostatnią kompilację.

 548
Author: Penny Liu, 2014-01-10

10 answers

Ten proces pozwala na całkowite odtworzenie dowolnego zadania na komputerze. Możesz również przerwać proces w dowolnym momencie i debugować. Poniżej przykład, gdzie doskonale odwzorowuję wyniki pracy # 191.1 na PHP-school/CLI-menu .

Warunki wstępne

  • masz publiczne repo na GitHub
  • przeprowadziłeś co najmniej jedną kompilację na Travisie
  • masz skonfigurowany Docker na swoim komputerze

Set up the build środowisko

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

  1. Stwórz swój własny tymczasowy identyfikator budowy

    BUILDID="build-$RANDOM"
    
  2. Wyświetl dziennik budowy, Otwórz przycisk Pokaż więcej, aby znaleźć linię instancji, wklej ją tutaj i uruchom (zamień znacznik po dwukropku na najnowszy dostępny):

    INSTANCE="travisci/ci-garnet:packer-1512502276-986baf0"
    
  3. Run The headless Serwer

    docker run --name $BUILDID -dit $INSTANCE /sbin/init
    
  4. Uruchom dołączonego klienta

    docker exec -it $BUILDID bash -l
    

Uruchom zadanie

Teraz jesteś w swoim środowisku Travis. Uruchom su - travis, Aby rozpocząć.

Ten krok jest dobrze zdefiniowany, ale jest bardziej żmudny i ręczny. Znajdziesz wszystkie polecenia, które Travis uruchamia w środowisku. Aby to zrobić, poszukaj wszystkiego w prawej kolumnie, która ma znacznik 0.03 s.

Po lewej stronie będziesz zobacz rzeczywiste polecenia. Uruchom te polecenia, w kolejności.

Wynik

Teraz jest dobry czas na uruchomienie history polecenia. Możesz ponownie uruchomić proces i odtworzyć te polecenia, aby uruchomić ten sam test na zaktualizowanej bazie kodu.

  • jeśli repo jest prywatne: ssh-keygen -t rsa -b 4096 -C "YOUR EMAIL REGISTERED IN GITHUB" to cat ~/.ssh/id_rsa.pub i Kliknij tutaj aby dodać klucz
  • FYI: możesz git pull z wewnątrz Dockera załadować commity z twojego dev boxa przed wysłaniem ich na GitHub
  • jeśli chcesz zmienić komendy uruchamiane wtedy twoim obowiązkiem jest dowiedzieć się, jak to przekłada się z powrotem na działające .travis.yml.
  • Nie wiem jak wyczyścić środowisko dokera, wygląda to na skomplikowane, może to wycieka pamięć
 214
Author: William Entriken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-12 08:40:20

Travis-ci oferuje nową infrastrukturę opartą na kontenerach, która korzysta z Dockera. Może to być bardzo przydatne, jeśli próbujesz rozwiązać kompilację travis-ci, odtwarzając ją lokalnie. To pochodzi z Dokumentacji Travisa CI .

Rozwiązywanie problemów lokalnie w obrazie dokera

Jeśli masz problemy ze znalezieniem dokładnego problemu w kompilacji, często pomaga uruchomienie kompilacji lokalnie. Aby to zrobić, musisz korzystać z naszej infrastruktury opartej na kontenerach (IE, have sudo: false w twoim .travis.yml), i wiedzieć, którego obrazu dokera używasz na Travis CI.

Uruchamianie obrazu dokera opartego na kontenerze lokalnie

  1. Pobierz i zainstaluj silnik Docker Engine .
  2. Wybierz obraz z Docker Hub . Jeśli nie używasz obrazu specyficznego dla języka wybierz ci-ruby. Otwórz terminal i rozpocznij interaktywną sesję dokowania przy użyciu adresu URL obrazu:

    docker run -it travisci/ubuntu-ruby:18.04 /bin/bash
    
  3. Przełącz na użytkownika travis:

    su - travis
    
  4. Clone your repozytorium git do folderu / obrazu.
  5. ręcznie instaluj dowolne zależności.
  6. uruchom ręcznie komendę Travis CI build.
 165
Author: Scott McLeod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-09 13:33:19

Aktualizacja: mam teraz kompletną odpowiedź "pod klucz", wszystko w jednym, zobacz https://stackoverflow.com/a/49019950/300224 . zajęło to tylko 3 lata, aby dowiedzieć się!

Zgodnie z dokumentacją Travis ' a: https://github.com/travis-ci/travis-ci istnieje mikstura projektów, które zmawiają do dostarczenia usługi Travis CI, którą znamy i kochamy. Poniższy podzbiór projektów wydaje się zezwalać na lokalną funkcjonalność make test przy użyciu .travis.yml w Twoim projekt:

Travis-build

Travis-build tworzy build skrypt dla każdego zadania. Pobiera konfigurację z pliku .travis.yml i tworzy skrypt bash, który jest następnie uruchamiany w środowisku build przez travis-pracownik.

Travis-książki kucharskie

Travis-książki kucharskie Chef książki kucharskie, które są używane do tworzenia środowisk.

Travis-worker

Travis-worker jest odpowiedzialny za prowadzenie budowy skrypty w czystym środowisku. Strumieniuje wyjście dziennika do travis-rejestruje i wypycha aktualizacje stanu (build starting/finishing) do travis-hub.

(Pozostałe podprojekty są odpowiedzialne za komunikację z GitHub, ich interfejsem WWW, e-mailem i ich API.)

 87
Author: William Entriken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-28 00:06:55

Podobny do Scotta McLeoda, ale generuje również skrypt bash do uruchamiania kroków z .travis.yml.

Rozwiązywanie problemów lokalnie w Dockerze za pomocą wygenerowanego skryptu Bash

# 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
 23
Author: eregon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-22 13:01:38

Użyjwwtd (co zrobiłby travis) ruby gem, aby uruchomić testy na twojej lokalnej maszynie mniej więcej tak, jak na travisie.

Odtworzy macierz budowania i uruchomi każdą konfigurację, świetnie sprawdzając konfigurację przed naciśnięciem.

gem i wwtd
wwtd
 16
Author: grosser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-12 00:52:08

Tl; dr użyj obrazka określonego w https://docs.travis-ci.com/user/common-build-problems/#troubleshooting-locally-in-a-docker-image{[21]w połączeniu z https://github.com/travis-ci/travis-build#use-as-addon-for-travis-cli .


W 2019 roku]}

#troubleshooting-locally-in-a-docker-image sekcja została zastąpiona przez #running-builds-in-debug-mode który również opisuje jak SSH do zadania uruchomionego w trybie debugowania.

Edytuj 2019-07-26

#troubleshooting-locally-in-a-docker-image sekcja nie jest już częścią docs; oto dlaczego


Chociaż, to wciąż w historii Gita: https://github.com/travis-ci/docs-travis-ci-com/pull/2193 .

Poszukaj (dość starych, nie mogłem znaleźć nowszych) wersji obrazu pod adresem: https://travis-ci.org/travis-ci/docs-travis-ci-com/builds/230889063#L661 .



Chciałem sprawdzić, dlaczego jeden z testów w mojej kompilacji nie powiódł się z błędem, którego nie otrzymałem lokalnie.

Zadziałało.

To, co faktycznie działało, to użycie obrazu określonego w Rozwiązywanie problemów lokalnie w strona Docker Image docs. W moim przypadku było to travisci/ci-garnet:packer-1512502276-986baf0.

Udało mi się dodać {[7] } następujące kroki opisane na https://github.com/travis-ci/travis-build#use-as-addon-for-travis-cli .

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        11 months ago       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

Wszystko z .travis.yml zostało wykonane zgodnie z oczekiwaniami (zainstalowane zależności, uruchomione testy, ...).

Zauważ, że przed uruchomieniem bash ci.sh musiałem zmienić --branch\=\'\'\ na --branch\=master\ (zobacz ostatnie polecenie sed -i ...) w ci.sh.

Jeśli to nie zadziała polecenie poniżej pomoże zidentyfikować docelowy numer linii i możesz edytować linię ręcznie.

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$

Nie zadziałało.

Po zaakceptowanej odpowiedzi na to pytanie, ale nie znajdź obraz (travis-ci-garnet-trusty-1512502259-986baf0) wspomniany przez instance W https://hub.docker.com/u/travisci/.

Build wersja worker wskazuje na Travis-ci/worker commit i jego Travis-worker-install referencje quay.io/travisci/ jako rejestr obrazów. Więc Próbowałem.

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        3 years ago         5.36GB

Zdecydowanie nie wierny (Ubuntu 14.04) i nie mały.

 14
Author: Dušan Maďar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-06 17:23:05

Możesz spróbować Trevor , który używa Dockera do uruchomienia Twojego Travis build.

Z opisu:

Często muszę uruchamiać testy dla wielu wersji Node.js. Ale nie chcę przełączać wersji ręcznie za pomocą n/nvm lub wciskać kodu do Travis CI tylko po to, aby uruchomić testy.

Dlatego stworzyłem Trevora. Czyta .travis.yml i uruchamia testy we wszystkich wersjach, o które prosiłeś, tak jak Travis CI. Teraz możesz przetestować przed push i zachować historię Gita czysto.

 7
Author: Travis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Nie jestem pewien, jaki był twój pierwotny powód, aby uruchomić Travis lokalnie, jeśli po prostu chciał grać z nim, to przestań czytać tutaj, ponieważ to jest nieistotne dla Ciebie.

Jeśli masz już doświadczenie z hosted Travis i chcesz uzyskać to samo doświadczenie we własnym centrum danych, Czytaj dalej.

Od Grudzień 2014 Travis CI oferuje przedsiębiorstwo na miejscu wersja.

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

Cennik jest również częścią artykułu:

Licencjonowanie odbywa się na miejsca, gdzie każda licencja obejmuje 20 użytkowników. Ceny zaczynają się od $6,000 za licencję, która obejmuje 20 użytkowników i 5 jednoczesnych kompilacji. Jest opcja premium z nieograniczonymi kompilacjami za $8,500.

 6
Author: Radek Simko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-16 07:02:41

Możliwe jest SSH do środowiska CI poprzez host bounce. Funkcja nie jest wbudowana w CI, ale można ją osiągnąć przez następujące kroki.

  1. na serwerze bounce Utwórz użytkownika travis i upewnij się, że możesz do niego SSH.
  2. Umieść te linie w script: sekcji twojego .travis.yml (np. na końcu).

    - 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
    

    gdzie $bouncehostip jest IP / hostem twojego hosta bounce, a {[6] } jest Twoim zdefiniowanym hasłem SSH. Zmienne te można dodać jako zaszyfrowane zmienne .

  3. Przesuń zmiany. Powinieneś być w stanie nawiązać połączenie SSH z hostem bounce.

Source: Shell into Travis CI Build Environment.


Oto pełny przykład:

# 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

Zobacz: c-mart/travis-shell na GitHub .


Zobacz także: Jak odtworzyć środowisko budowania dla debugowania

 0
Author: kenorb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-09 14:17:24

Nie byłem w stanie użyć odpowiedzi tutaj tak, jak jest. Na początek Jak wspomniano , dokument pomocy Travis dotyczący lokalnego uruchamiania zadań został usunięty. Wszystkie wpisy na blogu i artykuły, które znalazłem, są na tym oparte. Nowy tryb "debug" nie przemawia do mnie, ponieważ chcę uniknąć czasów kolejek i infrastruktury Travis, dopóki nie będę miał pewności, że gdzieś się znalazłem z moimi zmianami.

W moim przypadku aktualizuję moduł Puppet i nie jestem ekspertem od Puppet, ani szczególnie doświadczony w Ruby, Travis, lub ich ekosystemach. Ale udało mi się zbudować wykonalny obraz testowy z porad i pomysłów w tym artykule i gdzie indziej, a także poprzez dokładne zbadanie dzienników budowy Travis CI.

Nie byłem w stanie znaleźć ostatnich obrazów pasujących do nazw w logach CI (na przykład mogłem znaleźć travisci/ci-sardonyx, ale nie mogłem znaleźć niczego z "xenial" lub o tej samej nazwie kompilacji). Z dzienników wynika, że obrazy są teraz przesyłane przez AMQP zamiast mechanizm bardziej mi znany.

Udało mi się znaleźć obraz travsci/ubuntu-ruby:16.04, który pasuje do systemu operacyjnego, który kieruję do mojego konkretnego przypadku. Nie ma wszystkich komponentów używanych w Travis CI, więc zbudowałem nowy na tej podstawie, z niektórymi komponentami dodanymi do obrazu, a innymi dodanymi w kontenerze podczas pracy w zależności od potrzeb.

Więc nie mogę zaoferować jasnej procedury, przepraszam. Ale to co zrobiłem, w gruncie rzeczy wywaliło się:
  1. Znajdź najnowsze Travis CI obraz w Docker Hub dopasowuje docelowy system operacyjny tak dokładnie, jak to możliwe.

  2. Sklonuj repozytorium do katalogu kompilacji i uruchom kontener z katalogiem kompilacji zamontowanym jako wolumin, z katalogiem roboczym ustawionym na wolumin docelowy

  3. Teraz ciężka praca: przejrzyj dziennik budowy Travisa i skonfiguruj środowisko. W moim przypadku oznaczało to skonfigurowanie RVM, a następnie użycie bundle do zainstalowania zależności projektu. RVM wydaje się być już obecny w środowisko Travis, ale musiałem go zainstalować; Wszystko inne pochodziło z odtwarzania poleceń w dzienniku budowy.
  4. Uruchom testy.

  5. Jeśli wyniki nie pasują do tego, co widziałeś w dziennikach Travis CI, wróć do (3) i zobacz, gdzie iść.

  6. Opcjonalnie Utwórz obraz wielokrotnego użytku.

  7. Dev i testuj lokalnie, a potem push i miejmy nadzieję, że Twoje wyniki będą zgodne z oczekiwaniami.

Wiem, że to nie jest konkretny i może być oczywisty, a przebieg na pewno się zmieni, ale mam nadzieję, że komuś się przyda. Plik Dockerfile i README dla mojego obrazu są na Githubie w celach informacyjnych.

 0
Author: Drew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-31 00:02:11