devops-практики в разработке решений для бизнеса —...
TRANSCRIPT
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