Devops-практики в разработке решений для бизнеса, Максим Пашук
DUMP-2015: «DevOps-практики в разработке решений для бизнеса»...
Transcript of DUMP-2015: «DevOps-практики в разработке решений для бизнеса»...
DevOps практики
в разработке приложений
для бизнеса
Максим Пашук
Проект
CRM-система
7 стран
9 сервисов
3k пользователей
Всё просто
ASP.NET
MVC
Web
ServerAdmin
Confluence
App
config
5-10 мин
Недостатки
Человеческий фактор
Инертность сознания
Всё сложно
ASP.NET
MVC
Service1
Service2
Country1
Country2
CountryN
Country1
Country2
CountryN
Admin
Server1
Server2
ServerN
30-60 мин
Мы стали медленнее
Overhead по инфраструктуре
Дольше тестируем
Заказчик недоволен
release
feedback
release
feedback
release
release
feedback
feedback
DevOps
Быстрая доставка изменений заказчику
Уменьшение стоимости доставки
Это agile в администрировании
Культура общения dev и ops
Автоматизация
Continuous Integration
Юнит-тесты
Статический анализ кода
Общий стиль кода
Метрики кода
Быстрый feedback
Dev TeamCity
Continuous Delivery
Configure
ServerDeploy App
Configure
App
Continuous
Integration
Ищем инструменты
chef, puppet, ansible, capistrano
Слабая поддержка Windows
Уникальные знания
Хочется родного
PowerShell (Ops)
Простой
Path.Combine(path1, path2);
Join-Path $path1 $path2
vs
PowerShell (Ops)
Однострочники
Get-VM | Start-VM | Stop-VM
Стандартные модули
IIS, SQL Server, NetApp, etc.
PowerShell (Dev)
.NET runtime
Работа с .NET библиотеками (!)
Процедурное программирование
Add-Type 'any.net.dll'
[string]::IsNullOrEmpty()
function Add($x, $y){$x + $y}
Automate Everything
Confluence PowerShellPowerShell
Modules
Version Everything
История изменений
Версионирование знаний
Версионирование инфраструктуры
Infrastructure As Code
$Table=@{'Env1'=@{};'Env2'=@{}
}
Уровень 1
$Table=@{'Env1'=@{'Host'='Host1'};'Env2'=@{'Host'='Host2'}
}
Уровень 2
Infrastructure As Code
Можно обратиться
$Table['Production']['Russia']['OrderValidation']['Hosts']
$Table['Env1']['Host']
Реальный пример
PowerShell Remoting
Аналог ssh
Не нужно доп. агентов
Передача файлов
Configuration service
Configuration
Servicepull App
Apppush Configuration
Service
Configuration service
Master config<configuration>
<appSettings><add
key="BusinessModel"value="Russia"/>
</appSettings></configuration>
XDT transform <configuration><appSettings>
<addkey="BusinessModel"value="Cyprus"xdt:Transform="SetAttributes"xdt:Locator="Match(key)"/>
</appSettings></configuration>
Configuration service
PM> Install-Package Microsoft.Web.Xdt
NuGet
PowerShell
Add-Type 'Microsoft.Web.XmlTransform.dll'
Сложный код
psake (https://github.com/psake/psake)
Powershell не хватает
Только процедурный стиль
psake
Task выполняется один раз
Task может зависеть от другого task
task Task1 -depends Task2, Task3
task Task4 -depends Task1, Task3
psakePre-post conditions
task Migrate-Elasticsearch `-precondition `{ $metadata['HasElasticsearch'] }
{...}
psake
Оркестровка процесса доставки
task Deliver -depends `Create-Infrastructure, `Configure-Infrastructure, `Deploy-Services, `Configure-Services
Всё вместе
psakeRemote
Management
Infrastructure
as Code Server1
Server2
ServerNConfiguration
service
PowerShellTeamCity
UI
Continuous Delivery
Automate everything
Version everything
PowerShell
Team Business
Что дальше
Continuous Deployment
Continuous Monitoring