Как запустить travis-ci локально
Я только что присоединился к проекту, и я новичок в travis-ci. Я бы предпочел не помещать каждое небольшое изменение в.travis.yml и каждое небольшое изменение, которое я делаю в исходный код, чтобы запустить сборку. С Дженкинс вы можете скачать Дженкинс и работать локально. Трэвис предлагает что-то подобное?
Примечание: я видел travis-ci cli и загрузил его, но все, что он, похоже, делает, это вызывает их API, который затем подключается к моему репозиторию github, поэтому, если я не нажму, не будет иметь значения, что я перезапущу последняя сборка.
9 ответов
Этот процесс позволяет полностью воспроизвести любое задание по сборке Travis на вашем компьютере. Также вы можете в любой момент прервать процесс и отладить его. Ниже приведен пример, в котором я прекрасно воспроизвожу результаты задания № 191.1 в php-school / cli-menu.
Предпосылки
- У вас есть публичное репо на GitHub
- Вы запустили хотя бы одну сборку на Трэвисе
- На вашем компьютере настроен Docker
Настройте среду сборки
Ссылка: https://docs.travis-ci.com/user/common-build-problems/
Создайте свой собственный временный идентификатор сборки
BUILDID="build-$RANDOM"
Просмотрите журнал сборки, откройте кнопку "Показать больше" для РАБОЧЕЙ ИНФОРМАЦИИ и найдите строку INSTANCE, вставьте ее здесь и запустите (замените тег после двоеточия на новейший доступный):
INSTANCE="travisci/ci-garnet:packer-1512502276-986baf0"
Запустите безголовый сервер
docker run --name $BUILDID -dit $INSTANCE /sbin/init
Запустите подключенный клиент
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
изнутри докера, чтобы загрузить коммиты из вашего окна разработчика, прежде чем вы отправите их на GitHub - Если вы хотите изменить команды, которые выполняет Travis, то ВАША обязанность выяснить, как это переводится обратно в рабочее состояние.
.travis.yml
, - Я не знаю, как очистить среду Docker, это выглядит сложно, может быть, это утечка памяти
Travis-ci предлагает новую контейнерную инфраструктуру, которая использует докер. Это может быть очень полезно, если вы пытаетесь устранить неполадки сборки travis-ci, воспроизводя ее локально. Это взято из документации Travis CI.
Устранение неполадок локально в образе Docker
Если у вас возникают проблемы с поиском точной проблемы в сборке, это часто помогает запустить сборку локально. Для этого вам нужно использовать нашу контейнерную инфраструктуру (т.е. иметь sudo: false
в вашем .travis.yml
) и узнать, какой образ Docker вы используете на Travis CI.
Запуск образа Docker на основе контейнера локально
- Загрузите и установите Docker Engine.
Выберите изображение в Docker Hub. Если вы не используете язык изображения, выберите
ci-ruby
, Откройте терминал и запустите интерактивный сеанс Docker, используя URL-адрес изображения:docker run -it travisci/ci-ruby /bin/bash
Переключиться на
travis
пользователь:su - travis
- Клонируйте ваш репозиторий git в
/
папка с изображением. - Вручную установите любые зависимости.
- Запустите команду сборки Travis CI вручную.
ОБНОВЛЕНИЕ: Теперь у меня есть полный ответ "под ключ", см. /questions/20824660/kak-zapustit-travis-ci-lokalno/20824680#20824680. Потребовалось всего 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.)
Подобно Скотту МакЛауду, но при этом также генерируется скрипт 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
ОБНОВЛЕНИЕ: этот ответ больше не актуален
Вы можете попробовать https://github.com/jolicode/JoliCi
он использует docker, чтобы попытаться быть локальной заменой travis-ci. он должен поддерживать php, nodejs и ruby. если чего-то не хватает, вы можете сообщить об ошибке на странице проекта
tl;dr Использовать изображение, указанное на https://docs.travis-ci.com/user/common-build-problems/ в сочетании с https://github.com/travis-ci/travis-build.
Я хотел проверить, почему один из тестов в моей сборке не прошел с ошибкой, которую я не получаю локально.
Работал.
На самом деле работало использование изображения, указанного в разделе " Устранение неполадок локально" на странице документации Docker Image. В моем случае это было travisci/ci-garnet:packer-1512502276-986baf0
,
Я смог добавить travise compile
Следующие шаги описаны на https://github.com/travis-ci/travis-build.
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$ bash ci.sh
Обратите внимание, что перед запуском bash ci.sh
Я должен был изменить --branch\=\'\'\
в --branch\=master\
и сохранил файл. Команда ниже помогла определить номер строки.
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.yml
был выполнен как ожидалось (зависимости установлены, тесты выполнены,...).
Не сработало
Последовал принятый ответ на этот вопрос, но не нашел изображение (travis-ci-garnet-trusty-1512502259-986baf0
) упоминается instance
на https://hub.docker.com/u/travisci/.
Рабочая версия сборки указывает на коммит travis-ci / worker и ссылки на travis-worker-install 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) и не маленький тоже.
Используйте wwtd (что бы сделал travis) ruby gem для запуска тестов на вашей локальной машине примерно так же, как они будут работать на travis.
Он будет воссоздавать матрицу сборки и запускать каждую конфигурацию, что прекрасно подходит для проверки работоспособности перед нажатием.
gem i wwtd
wwtd
Вы можете попробовать Trevor, который использует Docker для запуска вашей сборки Travis.
Из его описания:
Мне часто нужно запускать тесты для нескольких версий Node.js. Но я не хочу переключать версии вручную с помощью n/nvm или передавать код в Travis CI только для запуска тестов.
Вот почему я создал Тревор. Он читает.travis.yml и запускает тесты во всех запрошенных вами версиях, как и Travis CI. Теперь вы можете протестировать перед push и сохранить свою историю git в чистоте.
Я не уверен, какова была ваша первоначальная причина, по которой Тревис работал локально, если вы просто хотели поиграть с ним, то перестаньте читать здесь, поскольку это не имеет значения для вас.
Если у вас уже есть опыт работы с Travis и вы хотите получить такой же опыт в своем центре обработки данных, читайте дальше.
С декабря 2014 года Travis CI предлагает локальную версию Enterprise.
http://blog.travis-ci.com/2014-12-19-introducing-travis-ci-enterprise/
Ценообразование также является частью статьи:
Лицензирование осуществляется на места, где каждая лицензия включает 20 пользователей. Цена начинается с 6000 долларов за лицензию, которая включает 20 пользователей и 5 одновременных сборок. Есть премиум-вариант с неограниченным билдом за 8500 долларов.
Я не смог использовать здесь ответы как есть. Для начала, как уже отмечалось, был удален справочный документ Travis по локальному запуску заданий. Все записи и статьи в блогах, которые я нашел, основаны на этом. Новый режим "отладки" мне не нравится, потому что я хочу избежать очередей и инфраструктуры Travis, пока я не буду уверен, что кое-что получил с моими изменениями.
В моем случае я обновляю модуль Puppet и не являюсь экспертом в Puppet и не особо разбираюсь в Ruby, Travis или их экосистемах. Но мне удалось создать работоспособный тестовый образ на основе советов и идей, приведенных в этой и других статьях, а также путем тщательного изучения журналов сборки Travis CI.
Мне не удалось найти недавние изображения, соответствующие именам в журналах CI (например, я мог найти travisci/ci-sardonyx, но не смог найти ничего с "xenial" или с тем же именем сборки). Из журналов видно, что изображения теперь передаются через AMQP, а не через более знакомый мне механизм.
Мне удалось найти изображение
travsci/ubuntu-ruby:16.04
что соответствует ОС, на которую я ориентируюсь в моем конкретном случае. В нем нет всех компонентов, используемых в Travis CI, поэтому я построил новый на основе этого, с некоторыми компонентами, добавленными в изображение, а другие добавлены в контейнер во время выполнения, в зависимости от необходимости.
Так что я не могу предложить четкую процедуру, извините. Но то, что я сделал, по сути сводилось к следующему:
Найдите последний образ Travis CI в Docker Hub, максимально соответствующий вашей целевой ОС.
Клонируйте репозиторий в каталог сборки и запустите контейнер с каталогом сборки, смонтированным как том, с рабочим каталогом, установленным на целевой том
Теперь тяжелая работа: просмотрите журнал сборки Travis и настройте среду. В моем случае это означало настройку RVM, а затем использование
bundle
для установки зависимостей проекта. RVM, похоже, уже присутствует в среде Travis, но мне пришлось его установить; все остальное пришло из воспроизведения команд в журнале сборки.Запустите тесты.
Если результаты не соответствуют тому, что вы видели в журналах Travis CI, вернитесь к пункту (3) и посмотрите, куда идти.
При желании создайте многоразовое изображение.
Разработайте и протестируйте локально, а затем нажмите и, надеюсь, ваши результаты Travis будут такими, как ожидалось.
Я знаю, что это не конкретно и может быть очевидным, и ваш опыт определенно будет отличаться, но, надеюсь, это будет кому-то полезно. Dockerfile и README для моего изображения находятся на GitHub для справки.
Можно подключиться к среде Travis CI по SSH через узел отказов. Эта функция не встроена в Travis CI, но может быть реализована с помощью следующих шагов.
- На хосте отказов создайте
travis
user и убедитесь, что вы можете подключиться к нему по SSH. Поместите эти строки в
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. Эти переменные могут быть добавлены как зашифрованные переменные.Подтолкните изменения. Вы должны иметь возможность установить SSH-соединение с вашим хостом отказов.
Источник: оболочка в среду сборки Travis CI.
Вот полный пример:
# 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 для отладки