Как запустить 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/

  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 изнутри докера, чтобы загрузить коммиты из вашего окна разработчика, прежде чем вы отправите их на GitHub
  • Если вы хотите изменить команды, которые выполняет Travis, то ВАША обязанность выяснить, как это переводится обратно в рабочее состояние. .travis.yml,
  • Я не знаю, как очистить среду Docker, это выглядит сложно, может быть, это утечка памяти

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/ci-ruby /bin/bash
    
  3. Переключиться на travis пользователь:

    su - travis
    
  4. Клонируйте ваш репозиторий git в / папка с изображением.
  5. Вручную установите любые зависимости.
  6. Запустите команду сборки 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, поэтому я построил новый на основе этого, с некоторыми компонентами, добавленными в изображение, а другие добавлены в контейнер во время выполнения, в зависимости от необходимости.

Так что я не могу предложить четкую процедуру, извините. Но то, что я сделал, по сути сводилось к следующему:

  1. Найдите последний образ Travis CI в Docker Hub, максимально соответствующий вашей целевой ОС.

  2. Клонируйте репозиторий в каталог сборки и запустите контейнер с каталогом сборки, смонтированным как том, с рабочим каталогом, установленным на целевой том

  3. Теперь тяжелая работа: просмотрите журнал сборки Travis и настройте среду. В моем случае это означало настройку RVM, а затем использование bundleдля установки зависимостей проекта. RVM, похоже, уже присутствует в среде Travis, но мне пришлось его установить; все остальное пришло из воспроизведения команд в журнале сборки.

  4. Запустите тесты.

  5. Если результаты не соответствуют тому, что вы видели в журналах Travis CI, вернитесь к пункту (3) и посмотрите, куда идти.

  6. При желании создайте многоразовое изображение.

  7. Разработайте и протестируйте локально, а затем нажмите и, надеюсь, ваши результаты Travis будут такими, как ожидалось.

Я знаю, что это не конкретно и может быть очевидным, и ваш опыт определенно будет отличаться, но, надеюсь, это будет кому-то полезно. Dockerfile и README для моего изображения находятся на GitHub для справки.

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

  1. На хосте отказов создайте travis user и убедитесь, что вы можете подключиться к нему по 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-соединение с вашим хостом отказов.

Источник: оболочка в среду сборки 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 для отладки

Другие вопросы по тегам