Как запустить travis-ci локально

524

Я только что присоединился к проекту, и я новичок в travis-ci. Я бы предпочел не помещать каждое небольшое изменение в .travis.yml и каждое небольшое изменение, которое я делаю в исходный код, чтобы запустить сборку. С Дженкинс вы можете скачать Дженкинс и работать локально. Трэвис предлагает что-то подобное?

Примечание: я видел travis-ci cli и загрузил его, но все, что он, похоже, делает, это вызывает их API, который затем подключается к моему репозиторию github, поэтому, если я не нажму, то перезапуск не будет иметь значения последняя сборка.

Сэм Хаммами
источник
3
Вы должны иметь возможность запускать тесты локально, не запуская Travis CI. Зайдите в раздел «script» .travis.yml, чтобы узнать, какую команду запустить.
Константин Хаазе
69
Но простое выполнение тестов не является проблемой - часто сборка Travis дает сбой из-за шагов по установке и установке в install:разделе, и, вероятно, именно этот вопрос больше беспокоит.
Брэндон Родс
4
Я добавлю, что в сложных проектах множество причин (например, различные точечные выпуски или системные взаимодействия среды выполнения, внутренне зависимые от времени тесты, например тесты по тайм-ауту и ​​т. Д.), Сами тесты иногда могут вести себя по-разному в локальной среде и в Travis CI ,
Живописец

Ответы:

200

Этот процесс позволяет полностью воспроизвести любое задание по сборке Travis на вашем компьютере. Кроме того, вы можете прервать процесс в любое время и отладить. Ниже приведен пример, в котором я прекрасно воспроизвожу результаты задания № 191.1 в php-school / cli-menu .

Предпосылки

  • У вас есть публичное репо на GitHub
  • Вы запускали хотя бы одну сборку на Трэвисе
  • На вашем компьютере настроен Docker

Настройте среду сборки

Ссылка: https://docs.travis-ci.com/user/common-build-problems/

  1. Создайте свой собственный временный идентификатор сборки

    BUILDID="build-$RANDOM"
    
  2. Просмотрите журнал сборки , откройте кнопку «Показать больше» для РАБОЧЕЙ ИНФОРМАЦИИ и найдите строку INSTANCE, вставьте ее здесь и запустите (замените тег после двоеточия на новейший доступный) :

    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чтобы начать.

Этот шаг хорошо определен, но он более утомительный и ручной. Вы найдете каждую команду, которую Трэвис выполняет в среде. Чтобы сделать это, ищите все в правом столбце, который имеет тег, как 0.03s.

С левой стороны вы увидите актуальные команды. Запустите эти команды по порядку.

Результат

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

  • Если репо является частным: ssh-keygen -t rsa -b 4096 -C "YOUR EMAIL REGISTERED IN GITHUB"тогда cat ~/.ssh/id_rsa.pubи нажмите здесь , чтобы добавить ключ
  • К вашему сведению: вы можете git pullизнутри докера загрузить коммиты из вашего dev-бокса, прежде чем отправлять их на GitHub
  • Если вы хотите изменить команды, которые выполняет Travis, то ВАША обязанность выяснить, как это переходит обратно в работу .travis.yml.
  • Я не знаю, как очистить среду Docker, это выглядит сложно, может быть, это утечка памяти
Уильям Энтрикен
источник
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 не было загружено ни одной новой версии , тогда как ранее в месяц было много обновлений.
Скали
7
Ваша ссылочная ссылка больше не работает - т. Е. С этой страницы был удален раздел «Запуск образа Docker на основе контейнера». Возможно, разница в выводе экземпляра была вызвана тем, что он не был sudo: requiredустановлен? В моей текущей сборке я вижу, travis-ci-sardonyx-xenial-1547455603-2c98a19что я могу сопоставить с travisci / ci-sardonyx: packer-1547455648-2c98a19
maxschlepzig
4
для меня с помощью последней версии travisci / ci-garnet на док-концентраторе (travisci / ci-garnet: packer-1515445631-7dfb2e1) добился
цели
3
Если вы работаете с конкретным языком экземпляра travis, вы также можете использовать выделенное изображение, например, изображение python .
Закчарие Рамзи
162

Travis-ci предлагает новую контейнерную инфраструктуру, которая использует докер. Это может быть очень полезно, если вы пытаетесь устранить неполадки сборки 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 под сценарием: подраздел и был make test.
Скотт Маклеод
102
> Manually install any dependencies Это звучит как хороший способ получить результаты, которые не соответствуют обычным сборкам Travis.
Джерри
6
@ Джерри. При ручной установке зависимостей я предполагаю, что он подразумевает ручное выполнение команд, которые есть в вашем конфигурационном файле travis, которые управляют установкой зависимостей. Так что это те же команды, что и Трэвис CI, но не автоматизированные.
Chathan Driehuys
8
Я чувствую, что это ответ на мой вопрос, но Manually tun your Travis CI build command... Как, что? Как? Что это? У меня есть .travis.ymlфайл. Я пробовал travis-build, но это тупик.
Брэндон
2
@Brandon В вашем .travis.yml обычно есть подраздел сценария, который Тревис вызывает для создания вашего источника. Смысл этого ответа заключается в настройке локальной среды, идентичной той, на которой будет работать 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.ymlфайла и создает bashскрипт, который затем запускает travis-worker в среде сборки.

Travis-поваренные книги

travis-cookbooks содержит поваренные книги Chef , которые используются для обеспечения среды сборки.

Трэвис-работник

travis-worker отвечает за запуск сценариев сборки в чистой среде. Он направляет вывод журнала в travis-logs и передает обновления состояния (начало / завершение сборки) в travis-hub.

(Другие подпроекты отвечают за связь с GitHub, их веб-интерфейс, электронную почту и их API.)

Уильям Энтрикен
источник
4
Я считаю, что проект, использующий только эти три компонента и выполняющий make testфункцию, был бы великолепен. Прокомментируйте, если вы хотите поработать над этим со мной.
Уильям Энтрикен,
4
Об этом есть репо на travis .
hurrymaplelad
5
GitHub сегодня не работает из-за DDOS github.com/blog/1981-large-scale-ddos-attack-on-github-com Вот почему нам нужно локальное тестирование
Уильям Энтрикен,
20
Как мне на самом деле установить и запустить travis-build? В репо нет инструкций.
Рассерженная шлюха
1
@sindhus Нет, прости. Единственное решение, которое я нашел, - это разветвить репо, продолжать вносить изменения до тех пор, пока Travis не заработает, затем скопировать файл конфигурации в основной репо и сделать один коммит. Редактировать: если подумать, вы можете использовать временную ветку для этого, удалить удаленную ветку, как только это будет сделано, и зафиксировать изменения в одном.
Рассерженная шлюха
23

Подобно Скотту МакЛауду, но также генерирует скрипт bash для запуска шагов из .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
eregon
источник
Я был в состоянии следовать шагам до travis # to create ~/.travis. Трэвису нужна команда для выполнения.
Эйвинд 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 -h не показывает ее: ////
Давид Дрозд
16

Используйте wwtd (что бы сделал travis) ruby gem для запуска тестов на вашей локальной машине примерно так же, как они будут работать на travis.

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

gem i wwtd
wwtd
грубее
источник
Важное примечание: только rubyподдержка
msangel
должна быть возможность добавить поддержку для других языков, так как он запускает шаги
grosser
Это не нормально. Работает отлично! Спасибо!
ппетраки
14

tl; dr Использовать изображение, указанное на https://docs.travis-ci.com/user/common-build-problems/#troublesho-locally-in-a-docker-image в сочетании с https://github.com/ travis-ci / travis-build # использовать-как-дополнение-для-travis-cli .


РЕДАКТИРОВАТЬ 2019-12-06

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

РЕДАКТИРОВАТЬ 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/ .

Построить рабочие версии указывает на Трэвис-CI / работника фиксации и его Трэвис-работник установить ссылки quay.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.
Душан Мажар
Ссылка * Устранение неполадок локально в образе Docker * больше не работает
juliangonzalez
1
@juliangonzalez отредактировал с лучшей информацией, которую я смог выкопать.
Душан Магар
7

Вы можете попробовать Trevor , который использует Docker для запуска вашей сборки Travis.

Из его описания:

Мне часто нужно запускать тесты для нескольких версий Node.js. Но я не хочу переключать версии вручную с помощью n / nvm или передавать код в Travis CI только для запуска тестов.

Вот почему я создал Тревор. Он читает .travis.yml и запускает тесты во всех запрошенных вами версиях, как и Travis CI. Теперь вы можете проверить перед push и сохранить свою историю git в чистоте.

Travis
источник
2
К вашему сведению для тех, кто хочет попробовать это ... не поддерживает PHP
Крейг Уэйн
2
похоже исключительно на node.js. было бы неплохо продлить его
Жуан Нету
6

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

Если у вас уже есть опыт работы с Travis и вы хотите получить такой же опыт в своем центре обработки данных, читайте дальше.

С декабря 2014 года Travis CI предлагает локальную версию Enterprise.

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

Ценообразование также является частью статьи:

Лицензирование осуществляется на места, где каждая лицензия включает 20 пользователей. Цена начинается с 6000 долларов за лицензию, которая включает 20 пользователей и 5 одновременных сборок. Есть премиум-вариант с неограниченным билдом за 8500 долларов.

Радек Симко
источник
3
На самом деле меня это тоже заинтересовало. Я пытаюсь настроить работу Трэвиса для действительно неуклюжего проекта. Все эти коммиты 26 апреля возились с файлом .travis.yml ( github.com/gregturn/issue-aggregator/commits/master ). Хотелось бы, чтобы был более простой способ изменить конфигурацию, не нажимая на каждое редактирование.
gregturn
4
@gregturn Уродливый, но уменьшающий стресс обходной путь, который я нашел, заключался в клонировании моего репо во второе репозиторий GitHub. Таким образом, репозиторий whackamoleявляется копией проекта, над которым я действительно хочу работать, и я могу настроить временное задание на сборку Travis для этого проекта, в то время как я решаю некоторые проблемы автоматизации сборки. Как только я добьюсь этого, перебросьте десятки коммитов «упс» и подтолкните к настоящему репозиторию GitHub. (И, вероятно, удалите whackamole
репозиторий
3
Вам интересно, если лицензионный сбор в размере 6000 долларов является разовым или ежегодным?
Эрик
0

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

  1. На хосте bounce создайте 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 / хост вашего bounce-хоста и $sshpasswordваш определенный пароль SSH. Эти переменные могут быть добавлены как зашифрованные переменные .

  3. Нажмите изменения. Вы должны иметь возможность установить SSH-соединение с вашим bounce-хостом.

Источник: Shell в 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 .


Смотрите также: Как воспроизвести среду сборки travis-ci для отладки

kenorb
источник