Посты по тегу: Jenkins

Jenkins + LDAPS + самоподписные сертификаты

Проблема

При попытке сконфигурировать Jenkins для подключения к LDAP серверу с использованием шифрования данных получаем ошибку:

Unable to connect to ldaps://ldap.example.com:636 : javax.naming.CommunicationException: anonymous bind failed: ldap.example.com:636 [Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]

javax.naming.CommunicationException: anonymous bind failed: ldap.example.com:636 [Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]
    at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:198)
    at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2788)
    at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:319)
    at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:192)
    at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:210)
    at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:153)
    at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:83)

Она говорит нам, что Java не осилила TLS (SSL) из-за того, что у нас самоподписной сертификат.

Лечение

Заходим на сервер с Jenkins (если у вас он в доккере, то делайте все, что описано ниже внутри доккер контейнера).
Читать далее...

Jenkins, как инструмент для запуска тестов

Настало время нам познакомится с 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