Travis CI — это распределенная онлайн-служба непрерывной интеграции в мире разработки программного обеспечения для создания и тестирования кода, размещенного на GitHub.
Трэвис хорошо интегрировался с GitHub.В отличие от Jenkis, Трэвису не нужно развертывать службы на самом сервере, и он хорошо интегрирован с GitHub, поэтому он очень удобен для проектов с открытым исходным кодом.
Зарегистрируйтесь и настройте Travis
Успешно зарегистрируйтесь, войдите в систему и добавьте свой репозиторий на GitHub.
Выберите один или несколько проектов, которые необходимо интегрировать, и начните сборку, которая представляет собой процесс, когда крестик превращается в галочку.
Предполагая, что Travis сейчас включен для проекта, сначала перейдите к просмотру элементов, которые включены по умолчанию в настройках, и установите их в соответствии с вашими фактическими потребностями.Настройки по умолчанию для особых нужд подходят.
Дальнейшие шаги очень понятны, и у официального также есть описание к картинке:
Добавьте .travis.yml
Грубо говоря, дальше дело в том, как написать этот конфигурационный файл, потому что Трэвис выполняет соответствующие действия по этому конфигурационному файлу.
В зависимости от вашего языка конфигурация также будет сильно различаться, потому что мой блог написан с использованием популярного PHP-фреймворка Laravel, поэтому я возьму его здесь в качестве примера.Самый упрощенный файл конфигурации PHP, предоставленный официальным лицом:
language: php
php:
- 7.1.9
- nightly
запуск сборки
Далее, в качестве третьего шага, упомянутого выше, это.travis.yml
Отправьте файл на GitHub, и Трэвис автоматически запустит задачу сборки.
Я знал, что это будет не так просто в первый раз, это не удалось. . .
Причина ошибки - выполнитьphpunit
Советы по времени:
PHP Warning: require(/home/travis/build/stephencode/super-admin/bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in /home/travis/build/stephencode/super-admin/bootstrap/autoload.php on line 17
На первый взгляд, это пакет зависимостей композитора вашего собственного проекта.autoload.php
Файл не найден, он не должен выполнятьсяcomposer up
Такие операции в сочетании с информацией, найденной в Интернете, лучшим решением являетсяinstall
Слой добавить строку:
install:
- composer install --prefer-dist --optimize-autoloader --quiet
Таким образом, вышеуказанная ошибка не будет сообщена, а затем будет сообщена следующая ошибка. . .
1) Tests\Feature\RouteTest::testBasicTest
RuntimeException: No application encryption key has been specified.
Собственно, это то, что у меня есть в Laravelphpunit.xml
Не настроен должным образом. будет<env name="APP_KEY" value="base64:xxxxxx="/>
Просто сделай это, в<php></php>
В теге этот ключ генерируется самостоятельно.
После того, как пять или шесть раз неудачная сборка, я, наконец, получил ее.
Автоматическое развертывание на удаленных серверах
Теперь, когда сборку можно автоматизировать, следующим шагом будет развертывание на удаленном сервере. Трэвис предлагаетafter_success
для реализации этого шага.
Подождите, мы хотим выполнить развертывание на удаленном сервере, поэтому мы должны позволить Трэвису войти в удаленную службу, так что же делать с паролем для входа в систему для обеспечения безопасности? Это первая проблема, которую нужно решить, а простой текст определенно неприемлем.
Зашифрованный пароль для входа
Кажется, что эту проблему нужно решить в первую очередь, и Travis Docs также помог мне рассмотреть решение этой неизбежной проблемы (Encrypting Files)
Давайте потренируемся вместе:
Сначала установите travis через драгоценный камень Ruby.
gem install travis
Эй, после нескольких повторных попыток я обнаружил, что после удара по этой оболочке это было похоже на мертвое море, и я не пукнул. . . Даже если агент включен, он все равно не двигается, и кроме как сменить зеркало, ничего не остается.
$ gem sources -l
*** CURRENT SOURCES ***
https://rubygems.org/
Проверьте текущее зеркало, этот продукт (rubygems) на удивление труднодоступен в Китае, найдите источник внутреннего зеркала в Интернете,Ruby ChinaЭто должно быть очень заметно~
$ gem update --system
$ gem sources --add https://gems.ruby-china.org/
Затем снова проверьте зеркало драгоценных камней, чтобы убедиться, что есть только источник драгоценных камней для Ruby China.
Хорошо, теперь вы можете с радостью установить travis
$ sudo gem install travis
Далее давайте сначала войдем в Travis из командной строки.
$ travis login
We need your GitHub login to identify you.
This information will not be sent to Travis CI, only to api.github.com.
The password will not be displayed.
Try running with --github-token or --auto if you don't want to enter your password anyway.
Username: xxx@xxx.xxx
Password for xxx@xxx.xxx: ***
Successfully logged in as demo!
Вам будет предложено ввести пароль от своей учетной записи GitHub.Это сервис GitHub, так что не беспокойтесь об утечке пароля.
Измените каталог на корневой каталог проекта, то есть.travis.yml
Под содержанием. Поскольку нам нужно разрешить Трэвису удаленно входить на наш сервер, нам нужно зашифровать локально сохраненный закрытый ключ SSH (по умолчанию вы также используете режим входа без пароля SSH, если вы не уверены, вы можете обратиться к моей статье"SSH вход без пароля").
$ travis encrypt-file ~/.ssh/id_rsa --add
Detected repository as xxx/xxx, is this correct? |yes| yes
encrypting ~/.ssh/id_rsa for xxx/xxx
storing result as id_rsa.enc
storing secure env variables for decryption
Make sure to add id_rsa.enc to the git repository.
Make sure not to add ~/.ssh/id_rsa to the git repository.
Commit all changes to your .travis.yml.
В это время взгляните на текущий каталог.travis.yml
, будет еще несколько строк
before_install:
- openssl aes-256-cbc -K $encrypted_d89376f3278d_key -iv $encrypted_d89376f3278d_iv
-in id_rsa.enc -out ~\/.ssh/id_rsa -d
Чтобы обеспечить нормальные разрешения, добавьте дополнительную строку оболочки для установки разрешений.
before_install:
- openssl aes-256-cbc -K $encrypted_d89376f3278d_key -iv $encrypted_d89376f3278d_iv
-in id_rsa.enc -out ~/.ssh/id_rsa -d
- chmod 600 ~/.ssh/id_rsa
Можно использовать и другой момент, потому что при первом входе travis на удаленный сервер будет проверка хоста SSH, и здесь будет проблема доверия к хосту. Официальное решение — добавить конфигурацию аддонов:
addons:
ssh_known_hosts: your-ip
В этот момент Трэвис может войти на свой удаленный сервер без пароля~
Автоматическое развертывание
Теперь, когда вы можете войти на сервер без пароля, вы можете написать сценарий развертывания и выполнить его при входе в систему. Все идет своим чередом~
Написать сценарии развертывания
Мой уровень написания сценариев оболочки очень ограничен, поэтому вот минимальная демонстрация для справки:
#!/bin/bash
cd /path/to/your-project
git pull origin master
echo 'travis build done!'
Выполнить сценарий развертывания
существует.travis.yml
Пропишите эти две строки в файле конфигурации:
after_success:
- ssh your-user@your-ip "./your-shell-script"
не забудьте поставитьyour-user
,your-ip
,your-shell-script
Замените их своими!
высокий знак
После тяжелого дня борьбы я всегда надеюсь, что другие увидят плоды моего труда.Что еще я могу сделать, кроме написания этой статьи? Это естественно для моего собственного проекта на GitHub.README.mdпоказать высокийbuild:passing
флаг, например:
Суммировать
Этот процесс в основном является процессом обучения, который никогда не доходит до встречи, я узнал из него много нового, а также нашел некоторые свои недостатки, такие как написание шелл-скриптов. . .
Наконец, опубликуйте мой собственный.travis.yml
, я аннотирую и объясню часть о личной конфиденциальности:
language: php
php:
- 7.1.9
- nightly
env:
- APP_DEBUG=false
before_install:
- openssl aes-256-cbc -K $encrypted_d89376f3278d_key -iv $encrypted_d89376f3278d_iv
-in id_rsa.enc -out ~/.ssh/id_rsa -d
- chmod 600 ~/.ssh/id_rsa
install:
- composer install --prefer-dist --optimize-autoloader --quiet
notifications:
email:
recipients:
- stephenfxl@gmail.com
on_success: always
on_failure: always
script:
- phpunit -c phpunit.xml --coverage-text
after_success:
- ssh xxx@xxxx.xxxx.xxxx.xxxx "./travis_build" # 请替换成自己的登录IP和登录用户
addons:
ssh_known_hosts: xxxx.xxxx.xxxx.xxxx # 请替换成自己的服务器IP
Ссылка на эту статью: