Travis CI Series: Блог по автоматизированному развертыванию

GitHub Laravel Travis CI
Travis CI Series: Блог по автоматизированному развертыванию

Travis CI — это распределенная онлайн-служба непрерывной интеграции в мире разработки программного обеспечения для создания и тестирования кода, размещенного на GitHub.

travis ci

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

Зарегистрируйтесь и настройте Travis

Успешно зарегистрируйтесь, войдите в систему и добавьте свой репозиторий на GitHub.

add repo

Выберите один или несколько проектов, которые необходимо интегрировать, и начните сборку, которая представляет собой процесс, когда крестик превращается в галочку.

Предполагая, что Travis сейчас включен для проекта, сначала перейдите к просмотру элементов, которые включены по умолчанию в настройках, и установите их в соответствии с вашими фактическими потребностями.Настройки по умолчанию для особых нужд подходят.

Дальнейшие шаги очень понятны, и у официального также есть описание к картинке:

build step

Добавьте .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>В теге этот ключ генерируется самостоятельно.

После того, как пять или шесть раз неудачная сборка, я, наконец, получил ее.

build failed

Автоматическое развертывание на удаленных серверах

Теперь, когда сборку можно автоматизировать, следующим шагом будет развертывание на удаленном сервере. Трэвис предлагает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флаг, например:

build tag

Суммировать

Этот процесс в основном является процессом обучения, который никогда не доходит до встречи, я узнал из него много нового, а также нашел некоторые свои недостатки, такие как написание шелл-скриптов. . .

Наконец, опубликуйте мой собственный.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

Ссылка на эту статью: