@erwin_staal
About me
Erwin Staal
Software engineer
ALM Consultant
Slide 3
Slide 3 text
@erwin_staal
Slide 4
Slide 4 text
@erwin_staal
15.45u 17.04u
Slide 5
Slide 5 text
@erwin_staal
DevOps is the union of people, process,
and products to enable continuous delivery of
value to our end users
Donovan Brown, Microsoft
Slide 6
Slide 6 text
@erwin_staal
Pipeline
Dev Build Deploy + Test Production
Slide 7
Slide 7 text
@erwin_staal
Branching
A A
Master
Development
Feature A
B
Feature B B B
Slide 8
Slide 8 text
@erwin_staal
Trunk based development
A
Master
B
A
B B
Feature A
Feature B
Slide 9
Slide 9 text
@erwin_staal
Dev – Code Review
Slide 10
Slide 10 text
@erwin_staal
Dev – Code Review
Slide 11
Slide 11 text
@erwin_staal
Dev – Branch policy
Slide 12
Slide 12 text
@erwin_staal
Dev – Branch policy
Slide 13
Slide 13 text
@erwin_staal
Pipeline
Dev Build Deploy + Test Production
Slide 14
Slide 14 text
@erwin_staal
Build
Slide 15
Slide 15 text
@erwin_staal
Build
Slide 16
Slide 16 text
@erwin_staal
Build
Slide 17
Slide 17 text
@erwin_staal
Build
Slide 18
Slide 18 text
@erwin_staal
Pipeline
Dev Build Deploy + Test Production
Slide 19
Slide 19 text
@erwin_staal
Deploy - pipeline
Slide 20
Slide 20 text
@erwin_staal
Deploy - pipeline
Slide 21
Slide 21 text
@erwin_staal
Deploy – Database changes
v1 v3
v2
Slide 22
Slide 22 text
@erwin_staal
Deploy – Database changes
Id Name CreatedDate
1 Peter 2017-05-19
2 John 2017-05-21
Id Name CD CreatedDate
1 Peter 2017-05-19 2017-05-19
2 John 2017-05-21 2017-05-21
Id Name CD
1 Peter 2017-05-19
2 John 2017-05-21
v1 v2 v3
Slide 23
Slide 23 text
@erwin_staal
Deploy – Database changes
public partial class AddStockProperty : DbMigration
{
public override void Up()
{
AddColumn("dbo.Fruit", "Stock", c => c.Int(nullable: false));
}
public override void Down()
{
DropColumn("dbo.Fruit", "Stock");
}
}
public class Fruit
{
public int ID { get; set; }
public string Name { get; set; }
}
public class Fruit
{
public int ID { get; set; }
public string Name { get; set; }
public int Stock { get; set; }
}
Slide 24
Slide 24 text
@erwin_staal
Deploy – Infrastructure as code
Slide 25
Slide 25 text
@erwin_staal
Deploy – Infrastructure as code
Slide 26
Slide 26 text
@erwin_staal
Deploy – Infrastructure as code
Slide 27
Slide 27 text
@erwin_staal
Deploy – Testing
Slide 28
Slide 28 text
@erwin_staal
Deploy – Testing
Slide 29
Slide 29 text
@erwin_staal
Deploy – Testing
Slide 30
Slide 30 text
@erwin_staal
Pipeline
Dev Build Deploy + Test Production
Slide 31
Slide 31 text
@erwin_staal
Feature Flags
Deployment != release
Business decision
Groups
Performance monitoring
No rollbacks
Feature A
Feature B
Dev Test Prod
Slide 32
Slide 32 text
@erwin_staal
Feature Flags Code Sample
var api = new FeatureFlagsApi();
if (await api.IsFeatureFlagEnabledAsync("MyFirstFlag", "SimpleMVCApp", userid)){
// FeatureFlag enabled
}
Slide 33
Slide 33 text
@erwin_staal
Feature Flags Code Sample
var api = new FeatureFlagsApi();
ViewBag.FlagEnabled =
await api.IsFeatureFlagEnabledAsync("MyFirstFlag", "SimpleMVCApp", userid);
@if (ViewBag.FlagEnabled) {