SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
Процессы разработки в
Яндексе
Андрей Казаринов, разработчик
Python Almaty, Алматы, 15.09.2015
3
Яндекс
4
Яндекс.Паспорт
〉Общепортальная компонтента
〉Команда >5 человек
〉Высокая нагрузка на чтение (>60К rps)
〉Большое количество интеграций
〉Работа с персональными данными
5
Цикл backend разработки
Постановка задачи
Разработка
ТестированиеСборка
Деплоймент Непрерывная
интеграция
〉Частые релизы (2-3 раза в неделю) + хотфиксы
〉До 10 одновременных разработчиков проекта
〉Много подпроектов, микросервисов, библиотек, пакетов (>20)
〉Много зависимостей, включая бинарные (>10)
〉Debian-пакеты
6
Условия разработки
〉Несколько окружений (development, testing, prestable, production)
〉Большое количество серверов (от 3-х до нескольких сотен)
〉Разные платформы Ubuntu (lucid, precise, trusty)
〉Необходимость переживать учения (N-1 датацентр)
7
Условия эксплуатации
〉N-1 датацентр
〉Плановые – замена сетевого оборудования
〉Внеплановые – бешеный экскаваторщик, котик в подстанции
〉Периодически
8
Учения
Подробнее: Как и для чего Яндекс отключает собственные дата-центры – https://clck.ru/9aWTK
Сервис без downtime и желательно без read-only
〉Надежность
〉Отказоустойчивость
〉Масштабируемость
9
Принципы
Разработка
〉«Собираем всех в одно гнездо» – все разработчики и проекты
разрабатываются на одной dev-машине
〉«Virtualenv в каждый дом»
〉«Береги код смолоду» (pep8, flake8, … )
〉«Trust but check»
11
Наши принципы
〉GitHub Enterprise
〉upstream & forks
〉upstream/master всегда работоспособен
〉force push запрещен в upstream
〉Pull requests (2 ревьюера)
12
Git flow
〉Микросервисы
〉Frontend + Backend API
〉HTTP/HTTPS, решительное нет CORBA
〉from XML to JSON
〉Infrastructure as a Service (OpenStack)
〉PaaS хостинг приложение (Cocaine)
13
Архитектурные принципы
〉OpenSource (https://github.com/cocaine)
〉Использует docker-контейнеры
〉Легко масштабируется
〉Легкий деплоймент
〉Есть адаптеры под разные языки, в том числе Python
14
Cocaine
Configurable Omnipotent Custom Applications Integrated Network Engine
Подробнее: https://tech.yandex.ru/cocaine/
Тестирование
〉Unit-тесты пишутся разработчиками (unittest2, nose, pytest)
〉Code coverage (в среднем 70-80%, >10к тестов в одном из проектов)
〉Моки внешних сервисов
〉Часто запускаются разработчиками
〉Прогоняются при сборке
16
Unit-тесты
〉Пишутся тестировщиками
〉Автоматизируем там, где это возможно
〉Ansible – тестовые сценарии
〉HTML Elements – тестирование интерфейсов
〉Allure Framework – построение отчетов
〉Запускаются тестировщиками перед релизом
17
Функциональное тестирование
〉Оценка производительности для расчета количества серверов
〉Сравнение различных технологических решений
〉Выявление скрытых багов, проявляющихся под нагрузкой
〉Периодическая регрессионная проверка производительности
18
Нагрузочное тестирование
〉Яндекс.Танк
мониторинг ресурсов
интерфейс для вывода графиков и управления «стрельбой»
модульность
различные профили нагрузки
поддержка различных протоколов (HTTP/SMTP/POP3/FTP/DNS)
〉«Стрельба» ведется на отдельном нагрузочном стенде
〉«Мишень» –микросервис или отдельный функционал сервиса
〉«Патроны» – подготовленные HTTP запросы
19
Яндекс.Танк
Подробнее: Яндекс.Танк – https://tech.yandex.ru/tank/
20
Яндекс.Танк
21
Яндекс.Танк
HTTP и сетевые ошибки
Распределение времен ответа
〉Ручное тестирование безопасности, Bugs Bounty
〉Чеклист запуска проекта
〉Сканирование уязвимостей – w3af (CSRF, XSS, доступы)
〉Checkmarx/Coverity – статический анализ кода на уязвимости
Server-Side Request Forgery (SSRF)
Remote Code Execution (RCE)
Insecure Randomness
Open redirects
и другие
22
Тестирование безопасности
Подробнее: Охота за ошибками – https://yandex.ru/bugbounty/
Сборка
〉Pbuilder – изоляция окружения сборки пакета
〉Сборка debian-пакета – распространение кода
〉Cобираем virtualenv и кладем его в debian-пакет – 

изоляция python-зависимостей
〉Кэшируем Python Wheels – ускорение сборки
〉Python-библиотеки загружаем на внутренний PyPI –
 переиспользование кода
24
Пакетирование
25
Пакетирование
pbuilder
debian-пакет
VirtualEnvконфигурации
скрипты запуска
〉python-зависимости
〉код проекта
и т.д.
〉Созданное окружение в pbuilder уничтожается
〉Прокидываем директории для кэша из системы при инициализации
образа
.pbuilderrc
BINDMOUNTS=<path to cache>
HOOKDIR=<path to hooks>
26
Хитрости кэширование Python Wheels
Подробнее: Pip install – почему так медленно? https://clck.ru/9ab2b
27
Внутренний PyPI
〉Localshop
сотни пользователей
сотни пакетов
〉Зеркало «большого» PyPI
28
Внутренний PyPI
29
Fabric
〉Альтернатива make
〉Автоматизация шагов сборки
〉Утилиты для разработки
сборка changelog
публикация coverage в GitHub
coverage diff
и т. д.
Непрерывная интеграция
〉Каждое изменение должно интегрироваться
〉Тесты
〉Быстрая сборка (<10 минут)
〉Интеграция на выделенной машине
31
Принципы непрерывной интеграции
〉TeamCity
〉Агенты для проекта и есть общий пул агентов
〉Шаблоны сборок
〉Интеграция с GitHub
〉Conductor – установка пакета на сервера (внутренний продукт)
32
Система непрерывной интеграции
Подробнее: Непрерывная интеграция Python-проектов в Яндексе – https://clck.ru/9aWTZ
33
TeamCity
34
Агенты
35
Шаблоны сборок
36
Интеграция с GitHub
37
Интеграция с GitHub
38
Conductor
39
Conductor
40
Conductor
1. Сборка пакета
1. Создание изолированного окружения
2. Сборка virtualenv с тестовыми утилитами
3. Тестирование с coverage
4. Сборка продакшен virtualenv
2. Публикация результатов coverage в GitHub (в pull request)
3. Загрузка debian-пакета на внутренний debian-репозиторий
4. Загрузка python-пакета на внутренний PyPI (в случае библиотеки) 
5. Тикет в систему деплоймента пакетов (Conductor)
41
Шаги
42
Публикация результатов coverage в GitHub
43
Coverage report
44
Coverage diff
45
Тикет в систему деплоймента (Conductor)
Результаты
〉Выявление багов на раннем этапе – дешевле разработка
〉Частые релизы – ускоренный feedback
〉Аккуратный однотипный код – легче поддерживать
47
Для менеджеров
〉На одной машине могут стоять пакеты с зависимостями различных
версий (virtualenv)
〉Пакет собирается в окружении близком к production (pbuilder)
〉Легко создавать новые сборки (унифицикация сборок, шаблоны)
〉Быстрая сборка пакета (до 10 минут) (кэширования Python Wheels)
48
Для разработчиков
Надежность vs Скорость разработки
49
Спасибо за внимание!
〉Контроль за стилем кода – https://events.yandex.ru/lib/talks/2444/
〉Как и для чего Яндекс отключает собственные дата-центры – 

http://habrahabr.ru/company/yandex/blog/243033/
〉Pip install – почему так медленно? https://events.yandex.ru/lib/talks/3070/
〉Непрерывная интеграция Python-проектов в Яндексе – 

https://events.yandex.ru/lib/talks/3071/
51
Источники
〉Cocaine – https://tech.yandex.ru/cocaine/
〉HTML Elements – https://tech.yandex.ru/html-elements/
〉Allure Framework – http://allure.qatools.ru
〉Яндекс.Танк – https://tech.yandex.ru/tank/
〉Checkmarx – https://www.checkmarx.com
〉PyPI localshop – https://pypi.python.org/pypi/localshop
〉TeamCity – https://www.jetbrains.com/teamcity/
〉w3af – https://github.com/andresriancho/w3af/
52
Источники
Андрей Казаринов
Разработчик
Контакты
andrey.kazarinovairjordan@yandex-team.ru
Python-вакансии в Яндексе – https://jobs.yandex.ru

Mais conteúdo relacionado

Mais procurados

Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаYandex
 
Scino: DVCS на примере Git
Scino: DVCS на примере GitScino: DVCS на примере Git
Scino: DVCS на примере GitSCINO
 
Запуск тестов с tox и Docker
Запуск тестов с tox и DockerЗапуск тестов с tox и Docker
Запуск тестов с tox и DockerAlexander Koshelev
 
Kubernetes
KubernetesKubernetes
KubernetesSQALab
 
Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsValentin Fedoskin
 
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеAndrey Kazarinov
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupBadoo Development
 
Continuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxDotNetConf
 
Разработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоРазработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоDotNetConf
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Ontico
 
Введение в maven
Введение в mavenВведение в maven
Введение в mavenDmitry Zinushin
 
Кратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиКратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиOSLL
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Badoo Development
 
Микросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бокМикросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бокDotNetConf
 
Как приручить реактивное программирование
Как приручить реактивное программированиеКак приручить реактивное программирование
Как приручить реактивное программированиеDotNetConf
 
Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магияAleksey Solntsev
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияSQALab
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 

Mais procurados (20)

Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проекта
 
Scino: DVCS на примере Git
Scino: DVCS на примере GitScino: DVCS на примере Git
Scino: DVCS на примере Git
 
Запуск тестов с tox и Docker
Запуск тестов с tox и DockerЗапуск тестов с tox и Docker
Запуск тестов с tox и Docker
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + Jenkins
 
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
 
Continuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под Linux
 
Разработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоРазработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешево
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
 
Введение в maven
Введение в mavenВведение в maven
Введение в maven
 
Кратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиКратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русски
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
 
Микросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бокМикросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бок
 
Как приручить реактивное программирование
Как приручить реактивное программированиеКак приручить реактивное программирование
Как приручить реактивное программирование
 
Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магия
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
 
Git for you
Git for youGit for you
Git for you
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестирования
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 

Semelhante a Процессы разработки в Яндексе

Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in productionAnatoly Popov
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыOleg Nenashev
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéInterSystems CEE
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergrationInterSystems
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораSQALab
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовSQALab
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesAliaksandr Ikhelis
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesDenis Izmaylov
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Ontico
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Vladimir Bakhov
 
Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"Tanya Denisyuk
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)guest40e031
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Serversrit2010
 
Тестовая инфраструктура в облаке
Тестовая инфраструктура в облакеТестовая инфраструктура в облаке
Тестовая инфраструктура в облакеSQALab
 

Semelhante a Процессы разработки в Яндексе (20)

Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Dev collaboration
Dev collaborationDev collaboration
Dev collaboration
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на Caché
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergration
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатора
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
 
Wgforge CI/CD
Wgforge CI/CDWgforge CI/CD
Wgforge CI/CD
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
 
Тестовая инфраструктура в облаке
Тестовая инфраструктура в облакеТестовая инфраструктура в облаке
Тестовая инфраструктура в облаке
 

Процессы разработки в Яндексе