Настало время нам познакомится с Jenkins’ом. Использовать его будем в качестве автоматического прогона тестов на удаленном сервере. Так как надоело использовать свою рабочую машину и ждать, когда же они наконец-то пройдут… Или упадут.
У нас есть:
- проект Ruby on Rails
- MySQL Database in project
- тесты Cucumber with Capybara
- Ubuntu сервер
Для начала ставим на сервер Java7, Tomcat7,
Jenkins - инструмент непрерывной интеграции.
Также необходимо установить MySQL server, Firefox, Chrome, Xvfb. Xvfb -
virtual frame buffer for X, он необходим для запуска GUI приложений на
виртуальных иксах.
Приступим:
sudo apt-get install mysql-server firefox xvfb tomcat7 git curl gawk g++ make libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake libtool bison pkg-config libffi-dev postfix
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
pushd /tmp
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome*апуск Tomcat7, если вы используете дроплеты DigitalOcean.
Для установки Jenkins необходимо скачать его, переименовать как ROOT.war и положить в каталог /var/lib/tomcat7/webapps.
Каталог /var/lib/tomcat7/webapps/ROOT необходимо удалить.
Для работы Jenkins необходимо создать несколько каталогов:
mkdir -p /usr/share/tomcat7/.rvm
mkdir -p /usr/share/tomcat7/.jenkins
chown -R tomcat7:tomcat7 /usr/share/tomcat7
sudo service tomcat7 restart
Доступ к Jenkins можно получить по адресу http://your_server_ip:8080.
Чтобы настроить Jenkins на прохождение кукумберовских тестов необходимо
установить некоторые плагины для Jenkins с панели Управления плагинами.
А именно: Git
Plugin,
Rvm, Xvfb
plugin.
Затем идем в Настройки Jenkins в Конфигурирование системы раздел, Xvfb
installation, добавляем в Xvfb installation
Name: default
Directory in which to find Xvfb executable: /usr/bin
Далее создаем новый Item для Jenkins’a - задачу со свободной
конфигурацией.
Управление исходным кодом: выбираем Git, устанавливаем Repository URL,
Credentials.
Branches to build: указываем ветку, с которой будет происходить сборка.
Среда сборки:
Start Xvfb before the build, and shut it down after:
Xvfb installation - default
Timeout in seconds - 0
Xvfb screen - 1440x900x24
Xvfb display name offset - 1
Run the build in a RVM-managed environment
<Ruby version>@project_name
Далее указываем команду shell:
export RAILS_ENV=test
export TEST_ENV_NUMBER=_cucumber_dev_${BUILD_NUMBER}
echo "
test:
adapter: mysql2
encoding: utf8
pool: 10
database: project_name_test<%= ENV['TEST_ENV_NUMBER'] %>
host: localhost
username: root
password: *******
" > config/database.yml
gem install bundler
bundle install
bundle exec rake db:create
bundle exec rake db:migrate
bundle exec cucumber
bundle exec rake db:drop
После сохранения изменений можно запускать первую сборку. Введенных выше
настроек вполне достаточно для минимальных требований.
Но мы на этом не останавливаемся и идем дальше.
Для получения результатов о выполнении сборки можно настроить
уведомления по электронной почте. Для этого необходимо добавить новый
шаг после сборки “Уведомления по почте”.
Также необходимо зайти в глобальные настройки Jenkins’a. В разделе
“Уведомление почтой” настроить сервер SMTP.
Для использования сервера gmail настройки будут следующие:
Сервер SMTP - smtp.gmail.com
Использовать аутентификацию для SMTP
Имя пользователя - xxx@gmail.com
Пароль - *****
Использовать SSL
Порт SMTP - 465
Reply-To Address - noreply@something.com
После установки настроек имеется возможность протестировать их.
С помощью “Проверить установки отправкой сообщения администратору.”
Вводим свой email и нажимаем “Test configuration”.
Если вы используете smtp сервер gmail, то у вас могу возникнуть ошибки
при отправке тестового письма. Это связано с настройками безопасности
Google и вашего аккаунта. Для того, чтобы разрешить отправку почты с
вашего аккаунта вам необходимо перейти по ссылке
https://accounts.google.com/b/0/DisplayUnlockCaptcha
Также имеется возможность указать Jenkins’у триггер для выполнения
сборки.
С помощью “Опрашивать SCM об изменениях” можно задать интервал проверки.
Поставив значение “* * * * *” Jenkins будет опрашивать репозиторий
каждую минуту на наличие изменений в ветке и при срабатывании запустит
сборку. Более детально о настройке периодичности смотрите документацию
по службе cron. Принцип его настройки идентичен.
P.S. Jenkins имеет огромное количество плагинов, которые обновляются
достаточно часто. С их помощью вы можете расширять возможности вашего
сервиса.
На этом пока все. В следующей статье мы научимся запускать Selenium Grid
для запуска параллельных тестов на разных серверах со значительным
ускорением их прохождения.
Статья написана совместно с командой Bug bang
theory