ci/cd on windows-based environments - noam shochat, etoro - devopsdays tel aviv 2015
TRANSCRIPT
CI/CD on Windows-based Environments
Your Social Investment Network
eToro©2015 Presentation materials are confidential and should not be copied, distributed or
passed on, directly or indirectly, to any other person.
Noam Shochat, Sr. DevOps Engineer | [email protected]
● The world’s largest social investment network
● Founded in 2007, raised $60M
● >200 employees (~half in Engineering)
● Offices in IL, UK, CY, RU and expending
Some Basic Facts...
eToro©2015 Presentation materials are confidential and should not be copied, distributed or passed on, directly or
indirectly, to any other person.
5M registered users. 140 Countries. 150M Trades.
9 different Apps!
eToro’s Legacy Technology
● HTML/ASP, Flash, iOS & Android clients
● 2 Geo-distributed data centers
● >130 Services
● > 500 Servers
● Hybrid MS tech stack & Open Source Server technologies
(Redis, RabbitMQ, HAProxy, etc…)
● SQL Server 2014 EE
eToro©2015 Presentation materials are confidential and should not be copied, distributed or passed on, directly or
indirectly, to any other person.
CI / CD ingredient
CI / CD
Code commit
Deploy and tests in QA
Production Build, Unit tests
Different OS’s
5 different
environments
Different development
languages
Manage all with Jenkins
CI / CD Pipeline
Check-In
GitHub
Mercurial
Build
MSBuild
Unit tests
NUnit
Integratio
n tests
UI Testing
Prod
Deployment
Managed by Jenkins
QA
Deployment
Jenkins Cross Platform Orchestration
Jenkins master
Build your flow with Jenkins
● Build Flow plugin
● WorkFlow plugin
Inside Jenkins Job
Script languages:
● Batch
● Powershell
● Shell
● Ruby
Auditing and reporting
● Graphite
● Splunk
● Slack
Provisioning servers and Deploy with Puppet
Things we’re doing with puppet
define general::web_service(
$artifact_source,
$config_file_name='web.config',
$configerb_path,
$erb_config_file_name='web.config.erb',
$deploy_destination,
$zipfile_mount_name,
$port=80,
$enableanonymousauthentication=false,
$template_config={}
)
{
include general::7zip
include general::remotesign
include general::basicfoldersinstall
addwebsite {"${name}":
port => $port,
require => Class['enableiis']
}
addwebsite::enablewindowsauthentication{"${name}":
site_name => $name,
require => [Class['enableiis'],Addwebsite["${name}"]],
}
addwebsite::enableanonymousauthentication{"${name}":
site_name => $name,
enable => $enableanonymousauthentication,
require => [Class['enableiis'],Addwebsite["${name}"]],
}
● Enable features
● Install 3rd party apps
● Creating folders
● Installing / Configure win
services
● Installing / Configure
websites (IIS)
Orchestration with mcollective
Mcollective architecture
Mcollective
Client
RabbitMQServer
Servers
Trigger Mcollective
Tools for Key Value store
Hiera
● Developed by Puppet labs, there for fully integrated with
puppet
● Key value store
● Configuration file per environment on the same puppet
master
ETCD
acl to the office acl to the office
Azure North Europe
server 1 server 2
APP1
DLL
APP2
DLL
APP3
DLL
CCM 2
UI -
Admin
server 3 server 4
CCM 4
Azure West Europe
ILB LBS ILB LBS
CCM 3CCM 1
CI / CD on Azure
Cloud
PAAS in Azure
● Cloud service
● Slots
● Uploading Packages
● Integration with github
(Git Hook)
IAAS on Azure
● Jenkins agent
● Puppet master
● Mcollective client
● Mcollective server and puppet agent on all servers.
Summaries
● Jenkins - Main CI / CD tool
● Puppet - Provisioning and deployment
● Mcollective - Orchestrate
● PowerShell Azure SDK - For deploying Web/worker
roles
● This is all just tools - DevOps is a lot more
Wish List
● Automate the creation of new Jobs and Flows in
Jenkins.
● More self service
Noam Shochat, Sr. DevOps Engineer | [email protected]