SlideShare una empresa de Scribd logo
1 de 17
Обзор Continuous Integration
инструментов и практические
кейсы их использования
Морванюк Виталий,
системный администратор
DrupalHosting from IT-Patrol
Зачем нужна Continuous Integration
• Отслеживать состояние исходников(собирается ли текущий build
или нет, и кто закоммитил изменения которые привели к ошибке)
• Автоматический запуск unit-тестов
• Оповещение о успехе/неудаче всех ответственных и последнего
коммитера
• Автоматическое разворачивание проекта на основе успешного
build-а
Краткий обзор доступных
инструментов для внедрения CI
• GitLAB/GitHub + Jenkins
+
GitHub + TravisCI
Пример файла конфигурации .travis.yml
для тестирования модуля Drupal
language: php
php:
- 5.6
- hhvm
matrix:
fast_finish: true
allow_failures:
- php: hhvm
Настройка языка
mysql:
database:
travis_ci_drupal_
module_example_
test
username: root
encoding: utf8
Настройка БД
before_install:
- sudo apt-get update > /dev/null
install:
- sudo apt-get install -y --force-yes
php5-cgi php5-mysql
- export
PATH="$HOME/.composer/vendor/bin:
$PATH"
- composer global require
drush/drush:8.*
Настройка инстанса, установка необходимых пакетов
Пример файла конфигурации .travis.yml для тестирования модуля
Drupal
before_script:
- cd ../..
- drush dl drupal-7 --drupal-project-rename=drupal
- mv bober2000/travis-ci-drupal-module-example drupal/sites/all/modules/travis_ci_drupal_module_example
- mysql -e 'create database travis_ci_drupal_module_example_test'
- cd drupal
- drush --verbose site-install --db-url=mysql://root:@127.0.0.1/travis_ci_drupal_module_example_test --yes
# reference and enable travis_ci_drupal_module_example in build site
- drush --yes pm-enable travis_ci_drupal_module_example
- drush --yes pm-enable simpletest
# start a web server on port 8080, run in the background; wait for initialization
- drush runserver 127.0.0.1:8080 &
- until netstat -an 2>/dev/null | grep '8080.*LISTEN'; do true; done
Предварительная настройка, установка Drupal и модулей, запуск встроенного web-cервера
script:
- php scripts/run-tests.sh --php "/usr/bin/php" --verbose --color --url http://http://127.0.0.1:8080
--class "TravisDrupalModuleExampleDrupalUnitTestCase"
Запуск тестов
Успешное завершение тестов TravisCI
Deploy после тестов
anynines
Appfog
Atlas
AWS CodeDeploy
AWS OpsWorks
Azure Web Apps
bintray
Boxfuse
Cloud 66
cloudControl
CloudFoundry
Deis
Divshot.io
Engine Yard
RubyGems
Surge.sh
deploy:
provider: script
script: scripts/deploy.sh
on:
branch: stage
GitHub Releases
Google App Engine
Google Cloud Storage
Hackage
Heroku
Launchpad
Modulus
Ninefold
npm
OpenShift
packagecloud.io
PyPI
Rackspace Cloud
Files
S3
Uploading Build
Artifacts
ExoScale
.travis.yml для кастомного деплоя
Особенности и ограничения TravisCI

процессор 2 ядра по 2.4GHz 7.5 GB RAM

максимальное время тестов 120 минут

если нет никакого вывода на stdout от скриптов в течении 10 минут, тест прерывается.
Хотя если у Вас ожидается использование подобных скриптов то следует обратить
внимание на параметр travis_wait он поможет увеличить данное время)

Travis для opensource предоставляет бесплатный тариф на котором ваши задачи
ставятся в общую очередь и обрабатываются по мере освобожнения ресурсов.
Интересную информацию можно увидеть на https://www.traviscistatus.com там видно
что в пиковые моменты до 400 задач выполняется для opensource проектов — тоесть
в пики придется ждать своей очереди.

Есть ограничение на количество инстансов — для OpenSource проектов это 2 в
случае платной подписки — максимум 10, тоесть имея 5 PR и тестируя его на 2х
версиях РНР мы загрузим весь доступный максимум — все остальные будут
поставлены в очередь.

Деплой возможен только после билда на внутреннем инстансе
CircleCI
machine:
php:
version: 5.6.18
pre:
- sudo apt-get update > /dev/null
- sudo apt-get install -y --force-yes php5-mysql
checkout:
post:
- mkdir ../travis_ci_drupal_module_example
- cp -a * ../travis_ci_drupal_module_example
- mv ../travis_ci_drupal_module_example .
dependencies:
pre:
- sudo composer global require drush/drush:8.*
- drush dl drupal-7 --drupal-project-rename=drupal
- mysql -u root -e 'create database travis_ci_drupal_module_example_test;'
- mv travis_ci_drupal_module_example
drupal/sites/all/modules/travis_ci_drupal_module_example
- drush -r drupal --verbose site-install --db-
url=mysql://root:@127.0.0.1/travis_ci_drupal_module_example_test --yes
- drush -r drupal --yes pm-enable simpletest
- drush -r drupal --yes pm-enable travis_ci_drupal_module_example
test:
pre:
- drush runserver 127.0.0.1:8080 &
override:
- php drupal/scripts/run-tests.sh --php "/usr/bin/php" --verbose --color --url
http://http://127.0.0.1:8080 --class "TravisDrupalModuleExampleDrupalUnitTestCase"
language: php
php:
- 5.6
- hhvm
matrix:
fast_finish: true
allow_failures:
- php: hhvm
mysql:
database: travis_ci_drupal_module_example_test
username: root
encoding: utf8
before_install:
- sudo apt-get update > /dev/null
install:
- sudo apt-get install -y --force-yes php5-cgi php5-mysql
- export PATH="$HOME/.composer/vendor/bin:$PATH"
- composer global require drush/drush:8.*
- cd ../..
- drush dl drupal-7 --drupal-project-rename=drupal
- mv bober2000/travis-ci-drupal-module-example drupal/sites/all/modules/travis_ci_drupal_module_example
- mysql -e 'create database travis_ci_drupal_module_example_test'
- cd drupal
- drush --verbose site-install --db-url=mysql://root:@127.0.0.1/travis_ci_drupal_module_example_test --yes
#- drush --yes pm-enable travis_ci_drupal_module_example
- drush --yes pm-enable simpletest
- drush runserver 127.0.0.1:8080 &
- until netstat -an 2>/dev/null | grep '8080.*LISTEN'; do true; done
- php scripts/run-tests.sh --php "/usr/bin/php" --verbose --color --url http://http://127.0.0.1:8080 --class
"TravisDrupalModuleExampleDrupalUnitTestCase"
Сравнение конфигурационных файлов TravisCI и CircleCI
Особенности и ограничения CircleCI

процессор 2 ядра по 2.4GHz 4GB RAM

нет встроенной возможности запустить тесты на разных версиях РНР
паралельно(в качестве решения можно использовать circleci-matrix или circleci-
helpers)

Деплой возможен только после билда на внутреннем инстансе по аналогии с
TravisCI

Немного нелогичный интерфейс, требующий привыкания
Deploy с помощью ZenCI
deploy:
7.x-1.x: #branch name
server: ocean.vps-private.net #server address
username: mv # user on server
dir: '{home}/github/drupal/{branch}' #dir for git checkout
env_vars: # set up env variables that we can use in scripts
later
docroot: '{home}/domains/test.mv.ocean.vps-private.net' #
www root dir
domain: test.mv.ocean.vps-private.net # domain name
sitename: testsite #site name
sitemail: noreply@test.mv.ocean.vps-private.net #site email
database_name: mv_test # DB name
database_user: mv_test # DB user
scripts:
init: '{deploy_dir}/scripts/install.sh' # install script
#!/bin/sh
echo "Installing drupal to " . $DOCROOT
DATABASE_PASS="test"
cd $DOCROOT
drush dl drupal-7 --drupal-project-rename=drupal
mv drupal/* .
mv drupal/.htaccess .
rm -rf drupal
ln -s $ZENCI_DEPLOY_DIR
sites/all/modules/travis_ci_drupal_module_example
drush --verbose site-install --db-url=mysql://
$DATABASE_USER:
$DATABASE_PASS@127.0.0.1/$DATABASE_NAME --yes
drush --yes pm-enable simpletest
drush --yes pm-enable travis_ci_drupal_module_example
Настройка deploy Скрипт инсталла
С помощью ZenCI происходит deploy drupal.ru
Тестирование с помощью ZenCI
test:
php53:
branch:
env_vars:
docroot: '{home}/www/'
box: 'backdrop-php53'
dir: '{home}/github/branch/{branch}'
scripts:
init: '{deploy_dir}/scripts/install_test.sh'
tests:
- '{deploy_dir}/scripts/run_tests.sh'
Настройка секции тестов
#!/bin/sh
SITEPATH="$HOME/www"
echo "Full site path: $SITEPATH"
cd $SITEPATH
php $SITEPATH/scripts/run-tests.sh --php "/usr/bin/php"
--verbose --color --url http://127.0.0.1 --class
"TravisDrupalModuleExampleDrupalUnitTestCase"
Скрипт запуска тестов run_tests.sh
С помощью ZenCI происходит тестирование Backdrop CMS
Особенности и ограничения ZenCI
•Цена, нет пакетов:
для opensource ограничения:
1. 250 deploy
2. 500 тестов
3. 2500 минут на Quadro Box
4. 1Gb диска
для private:
1.каждый deploy стоит 0.01$
2.каждый тест стоит 0.01$ + стоимость времени выполнения инстанса
3.Стоимость инстанса от 0.0008$/мин.
4.0.05$ Gb/день
•Независимый от тестов deploy
•Возможность запуска тестов в любом окружении при наличии ssh доступа
•REST JSON API для кастомизированного статуса по деплою и тестам.
•Проверка на CodeStyle(пока в beta по запросу)
•Возможность поднять свой QA сервер с помощью секции pull_request
•Необходимость писать отдельные скрипты для install и для запуска тестов
•Мало документации
•Мы только запустились :)
Спасибо за внимание!
ВОПРОСЫ?

Más contenido relacionado

La actualidad más candente

Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + Jenkins
Valentin Fedoskin
 
Виктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчикаВиктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчика
Positive Hack Days
 
Maven как средство сборки проекта
Maven как средство сборки проектаMaven как средство сборки проекта
Maven как средство сборки проекта
Yova Stoika
 

La actualidad más candente (20)

Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + Jenkins
 
Виктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчикаВиктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчика
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Maven как средство сборки проекта
Maven как средство сборки проектаMaven как средство сборки проекта
Maven как средство сборки проекта
 
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QA
 
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникПодводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
 
Эволюция нагрузочного тестирования – от простой автоматизации до BDD
Эволюция нагрузочного тестирования – от простой автоматизации до BDDЭволюция нагрузочного тестирования – от простой автоматизации до BDD
Эволюция нагрузочного тестирования – от простой автоматизации до BDD
 
Инструменты разработки ПО в *nix
Инструменты разработки ПО в *nixИнструменты разработки ПО в *nix
Инструменты разработки ПО в *nix
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehave
 
Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрования
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
 
Continuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под Linux
 
Java one presentation
Java one presentationJava one presentation
Java one presentation
 
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
 
Как мы приручили демона или процесс тестирования демонов в Badoo
Как мы приручили демона или процесс тестирования демонов в BadooКак мы приручили демона или процесс тестирования демонов в Badoo
Как мы приручили демона или процесс тестирования демонов в Badoo
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 

Similar a Обзор Continuous integration инструментов

Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Ontico
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
Andrey Rebrov
 
Пост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеПост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновение
beched
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Ontico
 
presentation_r00t_conf
presentation_r00t_confpresentation_r00t_conf
presentation_r00t_conf
Max Glekov
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
Nikita Borzykh
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
dddpaul
 

Similar a Обзор Continuous integration инструментов (20)

От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это просто
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload
 
Cтандартизация рабочего окружения и автоматизация развертывания рабочей среды
Cтандартизация рабочего окружения и автоматизация развертывания рабочей средыCтандартизация рабочего окружения и автоматизация развертывания рабочей среды
Cтандартизация рабочего окружения и автоматизация развертывания рабочей среды
 
Пост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновениеПост-эксплуатация веб-приложений в тестах на проникновение
Пост-эксплуатация веб-приложений в тестах на проникновение
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
 
presentation_r00t_conf
presentation_r00t_confpresentation_r00t_conf
presentation_r00t_conf
 
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
Net2
Net2Net2
Net2
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
HighLoad++ 2019: iptables + consul = :3
HighLoad++ 2019: iptables + consul = :3HighLoad++ 2019: iptables + consul = :3
HighLoad++ 2019: iptables + consul = :3
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 

Обзор Continuous integration инструментов

  • 1. Обзор Continuous Integration инструментов и практические кейсы их использования Морванюк Виталий, системный администратор DrupalHosting from IT-Patrol
  • 2. Зачем нужна Continuous Integration • Отслеживать состояние исходников(собирается ли текущий build или нет, и кто закоммитил изменения которые привели к ошибке) • Автоматический запуск unit-тестов • Оповещение о успехе/неудаче всех ответственных и последнего коммитера • Автоматическое разворачивание проекта на основе успешного build-а
  • 3. Краткий обзор доступных инструментов для внедрения CI • GitLAB/GitHub + Jenkins +
  • 5. Пример файла конфигурации .travis.yml для тестирования модуля Drupal language: php php: - 5.6 - hhvm matrix: fast_finish: true allow_failures: - php: hhvm Настройка языка mysql: database: travis_ci_drupal_ module_example_ test username: root encoding: utf8 Настройка БД before_install: - sudo apt-get update > /dev/null install: - sudo apt-get install -y --force-yes php5-cgi php5-mysql - export PATH="$HOME/.composer/vendor/bin: $PATH" - composer global require drush/drush:8.* Настройка инстанса, установка необходимых пакетов
  • 6. Пример файла конфигурации .travis.yml для тестирования модуля Drupal before_script: - cd ../.. - drush dl drupal-7 --drupal-project-rename=drupal - mv bober2000/travis-ci-drupal-module-example drupal/sites/all/modules/travis_ci_drupal_module_example - mysql -e 'create database travis_ci_drupal_module_example_test' - cd drupal - drush --verbose site-install --db-url=mysql://root:@127.0.0.1/travis_ci_drupal_module_example_test --yes # reference and enable travis_ci_drupal_module_example in build site - drush --yes pm-enable travis_ci_drupal_module_example - drush --yes pm-enable simpletest # start a web server on port 8080, run in the background; wait for initialization - drush runserver 127.0.0.1:8080 & - until netstat -an 2>/dev/null | grep '8080.*LISTEN'; do true; done Предварительная настройка, установка Drupal и модулей, запуск встроенного web-cервера script: - php scripts/run-tests.sh --php "/usr/bin/php" --verbose --color --url http://http://127.0.0.1:8080 --class "TravisDrupalModuleExampleDrupalUnitTestCase" Запуск тестов
  • 8. Deploy после тестов anynines Appfog Atlas AWS CodeDeploy AWS OpsWorks Azure Web Apps bintray Boxfuse Cloud 66 cloudControl CloudFoundry Deis Divshot.io Engine Yard RubyGems Surge.sh deploy: provider: script script: scripts/deploy.sh on: branch: stage GitHub Releases Google App Engine Google Cloud Storage Hackage Heroku Launchpad Modulus Ninefold npm OpenShift packagecloud.io PyPI Rackspace Cloud Files S3 Uploading Build Artifacts ExoScale .travis.yml для кастомного деплоя
  • 9. Особенности и ограничения TravisCI  процессор 2 ядра по 2.4GHz 7.5 GB RAM  максимальное время тестов 120 минут  если нет никакого вывода на stdout от скриптов в течении 10 минут, тест прерывается. Хотя если у Вас ожидается использование подобных скриптов то следует обратить внимание на параметр travis_wait он поможет увеличить данное время)  Travis для opensource предоставляет бесплатный тариф на котором ваши задачи ставятся в общую очередь и обрабатываются по мере освобожнения ресурсов. Интересную информацию можно увидеть на https://www.traviscistatus.com там видно что в пиковые моменты до 400 задач выполняется для opensource проектов — тоесть в пики придется ждать своей очереди.  Есть ограничение на количество инстансов — для OpenSource проектов это 2 в случае платной подписки — максимум 10, тоесть имея 5 PR и тестируя его на 2х версиях РНР мы загрузим весь доступный максимум — все остальные будут поставлены в очередь.  Деплой возможен только после билда на внутреннем инстансе
  • 11. machine: php: version: 5.6.18 pre: - sudo apt-get update > /dev/null - sudo apt-get install -y --force-yes php5-mysql checkout: post: - mkdir ../travis_ci_drupal_module_example - cp -a * ../travis_ci_drupal_module_example - mv ../travis_ci_drupal_module_example . dependencies: pre: - sudo composer global require drush/drush:8.* - drush dl drupal-7 --drupal-project-rename=drupal - mysql -u root -e 'create database travis_ci_drupal_module_example_test;' - mv travis_ci_drupal_module_example drupal/sites/all/modules/travis_ci_drupal_module_example - drush -r drupal --verbose site-install --db- url=mysql://root:@127.0.0.1/travis_ci_drupal_module_example_test --yes - drush -r drupal --yes pm-enable simpletest - drush -r drupal --yes pm-enable travis_ci_drupal_module_example test: pre: - drush runserver 127.0.0.1:8080 & override: - php drupal/scripts/run-tests.sh --php "/usr/bin/php" --verbose --color --url http://http://127.0.0.1:8080 --class "TravisDrupalModuleExampleDrupalUnitTestCase" language: php php: - 5.6 - hhvm matrix: fast_finish: true allow_failures: - php: hhvm mysql: database: travis_ci_drupal_module_example_test username: root encoding: utf8 before_install: - sudo apt-get update > /dev/null install: - sudo apt-get install -y --force-yes php5-cgi php5-mysql - export PATH="$HOME/.composer/vendor/bin:$PATH" - composer global require drush/drush:8.* - cd ../.. - drush dl drupal-7 --drupal-project-rename=drupal - mv bober2000/travis-ci-drupal-module-example drupal/sites/all/modules/travis_ci_drupal_module_example - mysql -e 'create database travis_ci_drupal_module_example_test' - cd drupal - drush --verbose site-install --db-url=mysql://root:@127.0.0.1/travis_ci_drupal_module_example_test --yes #- drush --yes pm-enable travis_ci_drupal_module_example - drush --yes pm-enable simpletest - drush runserver 127.0.0.1:8080 & - until netstat -an 2>/dev/null | grep '8080.*LISTEN'; do true; done - php scripts/run-tests.sh --php "/usr/bin/php" --verbose --color --url http://http://127.0.0.1:8080 --class "TravisDrupalModuleExampleDrupalUnitTestCase" Сравнение конфигурационных файлов TravisCI и CircleCI
  • 12. Особенности и ограничения CircleCI  процессор 2 ядра по 2.4GHz 4GB RAM  нет встроенной возможности запустить тесты на разных версиях РНР паралельно(в качестве решения можно использовать circleci-matrix или circleci- helpers)  Деплой возможен только после билда на внутреннем инстансе по аналогии с TravisCI  Немного нелогичный интерфейс, требующий привыкания
  • 13.
  • 14. Deploy с помощью ZenCI deploy: 7.x-1.x: #branch name server: ocean.vps-private.net #server address username: mv # user on server dir: '{home}/github/drupal/{branch}' #dir for git checkout env_vars: # set up env variables that we can use in scripts later docroot: '{home}/domains/test.mv.ocean.vps-private.net' # www root dir domain: test.mv.ocean.vps-private.net # domain name sitename: testsite #site name sitemail: noreply@test.mv.ocean.vps-private.net #site email database_name: mv_test # DB name database_user: mv_test # DB user scripts: init: '{deploy_dir}/scripts/install.sh' # install script #!/bin/sh echo "Installing drupal to " . $DOCROOT DATABASE_PASS="test" cd $DOCROOT drush dl drupal-7 --drupal-project-rename=drupal mv drupal/* . mv drupal/.htaccess . rm -rf drupal ln -s $ZENCI_DEPLOY_DIR sites/all/modules/travis_ci_drupal_module_example drush --verbose site-install --db-url=mysql:// $DATABASE_USER: $DATABASE_PASS@127.0.0.1/$DATABASE_NAME --yes drush --yes pm-enable simpletest drush --yes pm-enable travis_ci_drupal_module_example Настройка deploy Скрипт инсталла С помощью ZenCI происходит deploy drupal.ru
  • 15. Тестирование с помощью ZenCI test: php53: branch: env_vars: docroot: '{home}/www/' box: 'backdrop-php53' dir: '{home}/github/branch/{branch}' scripts: init: '{deploy_dir}/scripts/install_test.sh' tests: - '{deploy_dir}/scripts/run_tests.sh' Настройка секции тестов #!/bin/sh SITEPATH="$HOME/www" echo "Full site path: $SITEPATH" cd $SITEPATH php $SITEPATH/scripts/run-tests.sh --php "/usr/bin/php" --verbose --color --url http://127.0.0.1 --class "TravisDrupalModuleExampleDrupalUnitTestCase" Скрипт запуска тестов run_tests.sh С помощью ZenCI происходит тестирование Backdrop CMS
  • 16. Особенности и ограничения ZenCI •Цена, нет пакетов: для opensource ограничения: 1. 250 deploy 2. 500 тестов 3. 2500 минут на Quadro Box 4. 1Gb диска для private: 1.каждый deploy стоит 0.01$ 2.каждый тест стоит 0.01$ + стоимость времени выполнения инстанса 3.Стоимость инстанса от 0.0008$/мин. 4.0.05$ Gb/день •Независимый от тестов deploy •Возможность запуска тестов в любом окружении при наличии ssh доступа •REST JSON API для кастомизированного статуса по деплою и тестам. •Проверка на CodeStyle(пока в beta по запросу) •Возможность поднять свой QA сервер с помощью секции pull_request •Необходимость писать отдельные скрипты для install и для запуска тестов •Мало документации •Мы только запустились :)