Як запустити традиційне місцеве місце


524

Я щойно приєднався до проекту, і я новачок у традиціях. Я б краще не підштовхувати кожну маленьку зміну до .travis.yml і кожну невелику зміну, яку я вношу до джерела, щоб запустити збірку. За допомогою jenkins ви можете завантажити jenkins та працювати локально. Чи пропонує Трівіс щось подібне?

Примітка. Я бачив travis-ci cli і завантажував його, але все, що здається, це робити, це викликати їх API, який потім підключається до мого github repo, тому, якщо я не натискаю, не має значення, що я перезавантажую остання збірка.


3
Ви повинні мати змогу запускати тести локально, не запускаючи Travis CI. Перегляньте розділ «скрипт» .travis.yml, щоб побачити, яку команду запустити.
Костянтин Хаасе

69
Але лише тестування не є проблемою - часто збірка Travis не працює через налаштування та встановлення кроків у install:розділі, і, ймовірно, саме це питання хвилює більше.
Брендон Родос

4
Додам, що в складних проектах цілий ряд причин (наприклад, різні точкові випуски або системні взаємодії часу виконання, суттєві тести, що сприймають час, наприклад, тести таймауту тощо), самі тести іноді можуть поводитися по-різному в локальному середовищі та на Travis CI .
кінопродюсер

Відповіді:


200

Цей процес дозволяє повністю відтворити будь-яку роботу зі створення Travis на вашому комп’ютері. Також ви можете в будь-який час перервати процес і налагоджувати. Нижче наводиться приклад, де я чудово відтворюю результати роботи №191.1 в php-school / cli-меню .

Передумови

  • У вас є публічне репо на GitHub
  • Ви провели принаймні одну конструкцію на Тревісі
  • У вас на комп’ютері налаштовано Docker

Налаштуйте середовище побудови

Довідка: https://docs.travis-ci.com/user/common-build-problems/

  1. Складіть власний ідентифікатор тимчасової збірки

    BUILDID="build-$RANDOM"
    
  2. Перегляньте журнал збірки , відкрийте кнопку «Показати більше» для ІНФОРМАЦІЇ ПРО РОБОТУ та знайдіть рядок ІНСТАНЦІЇ, вставте сюди і запустіть (замініть тег після двокрапки на найновіший доступний) :

    INSTANCE="travisci/ci-garnet:packer-1512502276-986baf0"
    
  3. Запустіть безголовий сервер

    docker run --name $BUILDID -dit $INSTANCE /sbin/init
    
  4. Запустіть доданий клієнт

    docker exec -it $BUILDID bash -l
    

Виконати роботу

Тепер ви перебуваєте у вашому оточенні Travis. Біжіть su - travisдля початку.

Цей крок чітко визначений, але він більш виснажливий і ручний. Ви знайдете кожну команду, яку виконує Travis в оточенні. Для цього шукайте все у правильному стовпці, у якому є тег типу 0.03s.

У лівій частині ви побачите фактичні команди. Виконайте ці команди в порядку.

Результат

Зараз хороший час для запуску historyкоманди. Ви можете перезапустити процес і повторити ці команди, щоб виконати той самий тест на оновленій базі коду.

  • Якщо репо є приватним: ssh-keygen -t rsa -b 4096 -C "YOUR EMAIL REGISTERED IN GITHUB"тоді cat ~/.ssh/id_rsa.pubі натисніть тут , щоб додати ключ
  • FYI: Ви можете git pullзсередини докера завантажити документи з вашого вікна, перш ніж натиснути їх на GitHub
  • Якщо ви хочете змінити команди, які запускає Travis, то Ви повинні ВАШУ відповідальність розібратися, як це перетворюється назад на робочу .travis.yml.
  • Я не знаю, як почистити середовище Докера, це виглядає складно, можливо, це просочує пам'ять

22
У журналах у розділі instance:Я не можу побачити дійсний шлях зображення докера, щось подібне travis-ci-garnet-trusty-1512502259-986baf0. Спробував travisci/ci-garnet:$INSTANCEі travisci/$INSTANCE- не працює, не може знайти зображення. Також просто взяти постфікс (тобто travisci/ci-garnet:packer-1512502259-986baf0) не вийшло.
Рой Шилкрот

4
У мене є та сама проблема - зображення, згадане в екземплярі, інформація не може бути завантажена. Крім того, я спробував travisci/ci-garnet:packer-1512502276-986baf0образ, який пропонується в документах Travis . Цей доступний, але застарілий. Наприклад, CMake набагато старший, ніж доступний у Travis. За останні півроку ci-garnetдо Docker Hub не завантажено жодної нової версії , тоді як раніше було багато оновлень на місяць.
skalee

7
Ваша довідкова посилання більше не працює - тобто з цієї сторінки було видалено розділ "Запуск локального зображення докера на основі контейнера". Можливо, різниця у вихідному екземплярі була пов'язана з тим, що не sudo: requiredвстановлено? У поточному моєму складі я бачу, travis-ci-sardonyx-xenial-1547455603-2c98a19який я можу зробити карту travisci / ci-sardonyx: packer-1547455648-2c98a19
maxschlepzig

4
для мене, використовуючи останню версію travisci / ci-granet на докер-хабі (travisci / ci-granet: packer-1515445631-7dfb2e1) зробив трюк
taleb

3
Якщо ви працюєте над конкретним мовним екземпляром travis, ви також можете використовувати виділений образ, як-от python .
Zaccharie Ramzi

162

Travis-ci пропонує нову інфраструктуру для контейнерів, яка використовує докер. Це може бути дуже корисно, якщо ви намагаєтеся усунути неполадки у традиційній формі, відтворюючи її локально. Це взято з Travis CI в документації .

Усунення несправностей локально на зображенні Docker

Якщо у вас є проблеми з відстеженням точної проблеми в збірці, це часто допомагає запустити збірку локально. Для цього вам потрібно скористатися нашою інфраструктурою на основі контейнерів (тобто мати її sudo: falseу своєму .travis.yml) та знати, яке зображення Docker ви використовуєте в Travis CI.

Запуск локального зображення Docker на основі контейнера

  1. Завантажте та встановіть Docker Engine .
  2. Виберіть зображення з Docker Hub . Якщо ви не використовуєте вибраний для зображення образ ci-ruby. Відкрийте термінал і запустіть інтерактивний сеанс Docker, використовуючи URL-адресу зображення:

    docker run -it travisci/ubuntu-ruby:18.04 /bin/bash
    
  3. Перехід до travisкористувача:

    su - travis
    
  4. Клоніруйте своє сховище git у /папці зображення.
  5. Вручну встановлюйте будь-які залежності.
  6. Запустіть команду збірки Travis CI вручну.

6
@DustinGraham, це залежить від того, як був налаштований проект, побудований Travis CI. У проекті, над яким я працював, команда build була налаштована у файлі .travis.yml під сценарієм: subsection та was make test.
Скотт Маклеод

102
> Manually install any dependencies Це звучить як хороший спосіб закінчити результати, які не відповідають звичайним побудованим Travis.
Геррі

6
@Gerry Вручну встановлюючи залежності, я припускаю, що він означає, що він вручну запускає команди, які ви маєте у вашому файлі конфігурації Travis, який обробляє встановлення залежностей. Так що це ті самі команди, що і тревіс CI, а не автоматизовані.
Chathan Driehuys

8
Я відчуваю, що це відповідь на моє запитання якось, але Manually tun your Travis CI build command... Мовляв, що? Як? Що це? У мене є .travis.ymlфайл. Я спробував створити travis, але це глухий кут.
Брендон

2
@Brandon Всередині вашого .travis.yml зазвичай є підрозділ сценарію, на який травіс викликає Travis, щоб створити джерело. Суть цієї відповіді полягає в налаштуванні локального середовища, ідентичного тому, з яким би працював Travis. Далі ви самі будете викликати ці команди замість того, щоб покластись на travis, щоб виконати їх для вас. Таким чином, ви можете побачити ефекти запуску кожної команди самостійно в цьому середовищі - це може дати зрозуміти проблему складання, яку, можливо, матимуть у travis, яка в іншому випадку не була б доступною.
Скотт Маклеод

86

ОНОВЛЕННЯ. Зараз у мене є повна відповідь "все в одному", див. Https://stackoverflow.com/a/49019950/300224 . Тільки знадобилося 3 роки, щоб розібратися!

Відповідно до документації про Travis: https://github.com/travis-ci/travis-ci існує спільний варіант проектів, які домовляються продати веб-сервіс Travis CI, який ми знаємо і любимо. Подається наступний підмножина проектів, що дозволяє локальній make testфункціональності використовувати .travis.ymlваш проект:

travis-build

travis-build створює сценарій збірки для кожного завдання. Він бере конфігурацію з .travis.ymlфайлу і створює bashсценарій, який потім запускається у середовищі збирання travis-працівником.

травіс-кулінарні книги

Travis-поварені тримає Chef кулінарні книги, які використовуються для надання в середу збірки.

травіс-робітник

travis-работник відповідає за запуск сценаріїв складання в чистому середовищі. Він передає вихідний журнал у журнали travis-журнали та підштовхує оновлення стану (побудова стартових / фінішних) до travis-hub.

(Інші підпроекти відповідають за спілкування з GitHub, їх веб-інтерфейсом, електронною поштою та їх API.)


4
Я вважаю, що проект із використання саме цих трьох компонентів та виконання make testфункції був би чудовим. Прокоментуйте, якщо ви хочете попрацювати над цим зі мною.
Вільям Ентрікен

4
Про це на Travis repo є нитка .
поспішно подано

5
GitHub сьогодні знищений через DDOS github.com/blog/1981-large-scale-ddos-attack-on-github-com. Тому нам потрібне місцеве тестування
Вільям Ентрікен

20
Як насправді встановити та запустити travis-build? Інструкції в репо немає.
НезадоволенняГота

1
@sindhus Ні, вибачте Єдине знайдене нами рішення - роздрібнити репо, продовжувати вносити зміни, поки Travis не працює, а потім скопіювати конфігураційний файл в основний репо і зробити одну фіксацію. Редагувати: подумайте про це, ви можете використовувати для цього тимчасову гілку, видалити віддалену гілку після завершення і перезавантажити / сквош покласти в одну.
НезадоволенняЗакрито

23

Як у Скотта Маклеода, але це також генерує скрипт для запуску кроків від .travis.yml.

Усунення несправностей на локальному рівні в Docker за допомогою створеного сценарію 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

Мені вдалося виконати кроки до travis # to create ~/.travis. Тревісу потрібна команда для виконання.
Eivind Gussiås Løkseth

3
sudo - travisповинно бути su - travis.
Беренд де Бур

1
Роблячи крок компіляції, я отримую:/home/travis/.rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- travis/support (LoadError)
Беренд де Бур

2
@BerenddeBoer: Якщо ви ще не зрозуміли цю проблему: ось рішення, як позбутися проблеми cd ~/.travis/travis-build/ bundle install bundler add travis bundler binstubs travis cd <REPO_YOU_WANT_TO_RUN_COMPILE_IN> ~/.travis/travis-build/bin/travis compile
Venkateshwaran Selvaraj

2
travis компілювати чи більше не дійсний? Я бачу невідому компіляцію команд: / travis -h не показує її: ////
Давід Дрозд

16

Використовуйте wwtd (що б зробив Travis) ruby gem, щоб запустити тести на вашій локальній машині приблизно так, як вони працюватимуть на travis.

Він відтворить матрицю збірки та запустить кожну конфігурацію, що чудово підходить для перевірки налаштування перед тим, як натиснути.

gem i wwtd
wwtd

важлива примітка: лише rubyпідтримка
msangel

Потрібно мати можливість додавати підтримку й для інших мов, оскільки вона не може виконувати кроки
grosser

Це хворий. Чудово працює! Дякую!
ppetraki

14

tl; dr Використовуйте зображення, вказане на https://docs.travis-ci.com/user/common-build-problems/#troubleshooting-locally-in-a-docker-image у поєднанні з https://github.com/ travis-ci / travis-build # use-as-addon-for-travis-cli .


EDIT 2019-12-06

#troubleshooting-locally-in-a-docker-imageрозділ було замінено на #running-builds-in-debug-modeякий також описано, як SSH до завдання, що працює в режимі налагодження .

EDIT 2019-07-26

#troubleshooting-locally-in-a-docker-imageрозділ більше не є частиною документів; ось чому


Хоча це все ще в історії git: https://github.com/travis-ci/docs-travis-ci-com/pull/2193 .

Шукайте (досить старі, не вдалося знайти новіші) версії зображень за посиланням: https://travis-ci.org/travis-ci/docs-travis-ci-com/builds/230889063#L661 .



Я хотів перевірити, чому один із тестів моєї збірки не вдався з помилкою, яку я не отримую локально.

Працювали.

Насправді працювало використання зображення, вказаного під час усунення несправностей локально, на сторінці документів Docker Image . У моєму випадку це було travisci/ci-garnet:packer-1512502276-986baf0.

Мені вдалося додати travise compileнаступні кроки, описані на 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

Все від .travis.ymlбуло виконано як очікувалося (встановлені залежності, тести виконувались, ...).

Зверніть увагу , що перед запуском bash ci.shя повинен був змінити --branch\=\'\'\до --branch\=master\(див Передостання sed -i ...команда) в ci.sh.

Якщо це не працює, команда нижче допоможе визначити номер цільового рядка, і ви можете редагувати рядок вручну.

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$

Не працювало.

Після цього прийняли відповідь на це запитання, але не знайшли зображення ( travis-ci-garnet-trusty-1512502259-986baf0), згадане instanceна https://hub.docker.com/u/travisci/ .

Версія побудови робітника вказує на зобов’язання travis-ci / worker та його посилання на встановлення travis-workerquay.io/travisci/ як реєстр зображень. Тому я спробував це.

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

Однозначно не надійний (Ubuntu 14.04) і не маленький.


1
Працюючий підхід зробив це для мене. Але на додачу мені довелося зарадити http_proxyсередовище git clone. За замовчуванням git cloneкидає gnutls_handshakeвиняток. Тож я хочу нав'язати встановлення певної bundlerверсії, gem install bundler -v 1.16.6тому що bundler binstubs travisраніше не вдалося. Вдосконаліть потрібну bundlerверсію, запустивши `bundle info travis`
palik

1
Тут найкращий travis.ymlваріант відповіді, оскільки він пояснює, як компілювати в сценарій виконуваної оболонки. Чудово зроблено! Єдиним вдосконаленням цього був би механізм, за допомогою якого уникнути ручної заміни рядків при вказівці гілки, з якої потрібно будувати.
Бен Джонсон

1
@BenJohnson Я додав sedкоманду, яка стосується точки, яку ви зробили. Перегляньте команду перед запуском bash ci.sh.
Dušan Maďar

Посилання * Виправлення неполадок локально на зображенні Docker * більше не працює
juliangonzalez

1
@juliangonzalez редагував найкращу інформацію, яку я зміг копати.
Dušan Maďar

7

Ви можете спробувати Trevor , який використовує Docker для запуску побудови Тревіса.

З його опису:

Мені часто потрібно запускати тести для декількох версій Node.js. Але я не хочу перемикати версії вручну за допомогою n / nvm або натискати код на Travis CI просто для запуску тестів.

Тому я створив Тревор. Він читає .travis.yml і запускає тести в усіх запитуваних вами версіях, як і Travis CI. Тепер ви можете протестувати перед тим, як натиснути, і зберегти історію git чистою.


2
FYI для тих, хто хоче спробувати це ... не підтримує PHP
Крейг Уейн

2
видається виключно для node.js. було б добре продовжити це
João Neto

6

Я не впевнений, що було вашою первісною причиною запуску Тревіса локально, якщо ви просто хотіли пограти з ним, то перестаньте читати тут, оскільки це для вас не має значення.

Якщо ви вже маєте досвід роботи з влаштованим Travis і хочете отримати такий самий досвід у власному центрі обробки даних, читайте далі.

З грудня 2014 року Travis CI пропонує локальну версію Enterprise.

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

Цінова частина також є частиною статті:

Ліцензування здійснюється за місця, де кожна ліцензія включає 20 користувачів. Вартість починається від 6000 доларів за ліцензію, що включає 20 користувачів та 5 одночасних збірок. Існує преміальний варіант з необмеженою кількістю збірок за 8 500 доларів.


3
Мене це теж цікавило. Я намагаюся налаштувати роботу на справжньому незручному проекті. Усі ці зобов'язання 26 квітня співпадали з файлом .travis.yml ( github.com/gregturn/issue-aggregator/commiss/master ). Я хотів би, щоб був простіший спосіб попрацювати з конфігурацією, не потребуючи натискання кожного редагування.
gregturn

4
@gregturn Некрасивий, але зменшує стрес рішення, яке я придумав, було клонувати моє репо до другого репортажу GitHub. Таким чином, репо whackamoleє копією проекту, над яким я дуже хочу працювати, і я можу створити тимчасове завдання для збирання Travis для цього проекту, поки я розробляю перешкоди автоматизації збірки. Після того, як я це прибив, знов переставте кілька десятків "ой" і перейдіть до справжнього репортажу GitHub. (І, ймовірно, видаліть whackamole
репортаж

3
Цікаво, чи плата за ліцензію в розмірі 6000 доларів одноразова або щорічна.
Ерік

0

SSH до середовища Travis CI можна отримати через хост відмов. Ця функція не вбудована в Travis CI, але її можна досягти наступними кроками.

  1. На хості відмов створіть travisкористувача та переконайтеся, що ви можете SSH до нього.
  2. Покладіть ці рядки у script:розділ свого .travis.yml(наприклад, наприкінці).

    - 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знаходиться IP / хост вашого відмовного хоста, і $sshpasswordваш визначений пароль SSH. Ці змінні можуть бути додані як зашифровані змінні .

  3. Натисніть на зміни. Ви повинні мати можливість встановити SSH-з'єднання з хостом відмов.

Джерело: Shell into Travis CI Build Environment .


Ось повний приклад:

# 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

Дивіться: c-mart/travis-shellу GitHub .


Дивіться також: Як відтворити традиційне середовище побудови для налагодження

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.