Devops-практики в разработке решений для бизнеса —...

Preview:

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 по инфраструктуре

Дольше тестируем

Заказчик недоволен

releasefeedback

release

feedback

release

release

feedback

feedback

DevOps

Быстрая доставка изменений заказчику

Уменьшение стоимости доставки

Это agile в администрировании

Культура общения dev и ops

Автоматизация

Continuous Integration

Юнит-тесты

Статический анализ кода

Общий стиль кода

Метрики кода

Быстрый feedback

Dev TeamCity

Continuous Delivery

Configure Server

Deploy AppConfigure

AppContinuous 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 Service

pull App

Apppush ConfigurationService

Configuration serviceMaster 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

psakePre-post conditions

task Migrate-Elasticsearch ` -precondition ` { $metadata['HasElasticsearch'] }{...}

psakeОркестровка процесса доставки

task Deliver -depends ` Create-Infrastructure, ` Configure-Infrastructure, ` Deploy-Services, ` Configure-Services

Всё вместе

psakeRemote

Management

Infrastructureas Code Server1

Server2

ServerNConfigurationservice

PowerShellTeamCity

UI

Continuous DeliveryAutomate everything

Version everything

PowerShell

Team Business

Что дальшеContinuous Deployment

Continuous Monitoring

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

Спасибо

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

Recommended