DUMP-2015: «DevOps-практики в разработке решений для бизнеса»...

Preview:

Citation preview

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

Максим Пашукm.pashuk@2gis.ru

Спасибо

Задай вопрос, не стесняйся