Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

@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) {

Awesome new feature enabled!

}

Slide 34

Slide 34 text

@erwin_staal Monitoring

Slide 35

Slide 35 text

@erwin_staal Monitoring

Slide 36

Slide 36 text

@erwin_staal Thanks! Erwin Staal [email protected] @erwin_staal