Upload
devday
View
99
Download
0
Embed Size (px)
Citation preview
DevOps практики в разработке приложений для бизнеса
Максим Пашук
Проект CRM-система
7 стран
9 сервисов
3k пользователей
Всё просто
ASP.NET MVC
Web Server Admin
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 Server Deploy 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 PowerShell PowerShell Modules
Version Everything История изменений
Версионирование знаний
Версионирование инфраструктуры
Infrastructure As Code $Environments=@{ 'Env1'=@{}; 'Env2'=@{} }
Уровень 1
$Environments=@{ 'Env1'=@{'Host'='Host1'}; 'Env2'=@{'Host'='Host2'} }
Уровень 2
Infrastructure As Code Можно обратиться
$Environments['Production'] ['Russia'] ['OrderValidation'] ['Hosts']
$Environments['Env1']['Host']
Реальный пример
PowerShell Remoting Аналог ssh
Не нужно доп. агентов
Передача файлов
Configuration service
Configuration Service
pull App
App push ConfigurationService
Configuration service Master config
<configuration> <appSettings> <add
key="BusinessModel" value="Russia"/>
</appSettings> </configuration>
XDT transform <configuration> <appSettings> <add
key="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
psake Pre-post conditions
task Migrate-Elasticsearch ` -precondition ` { $metadata['HasElasticsearch'] } { ... }
psake Оркестровка процесса доставки
task Deliver -depends ` Create-Infrastructure, ` Configure-Infrastructure, ` Deploy-Services, ` Configure-Services
Всё вместе
psake Remote Management
Infrastructure as Code Server1
Server2
ServerN Configuration service
PowerShell TeamCity UI
Continuous Delivery Automate everything
Version everything
PowerShell
Team Business
Что дальше Continuous Deployment
Continuous Monitoring