Adrian marinica continuous integration in the visual studio world

27

description

CodeCampIasi25Oct2014

Transcript of Adrian marinica continuous integration in the visual studio world

Page 1: Adrian marinica   continuous integration in the visual studio world
Page 2: Adrian marinica   continuous integration in the visual studio world

Continuous Integration in the Visual Studio world@ADRIANMARINICA – SOFTWARE DEVELOPER AT MAXCODE

Page 3: Adrian marinica   continuous integration in the visual studio world

AgendaCONTINUOUS INTEGRATION

RELEASE MANAGEMENT

Q&A

Page 4: Adrian marinica   continuous integration in the visual studio world

Continuous IntegrationBEST PRACTICE OR BEST GIMMICK?

Page 5: Adrian marinica   continuous integration in the visual studio world

Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day.

Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible.

Martin Fowler

Page 6: Adrian marinica   continuous integration in the visual studio world

Success – a ten step list1. Maintain a Single Source Repository

2. Automate the Build

3. Make Your Build Self-Testing

4. Everyone Commits To the Mainline Every Day

5. Every Commit Should Build the Mainline on an Integration Machine

6. Keep the Build Fast

7. Test in a Clone of the Production Environment

8. Make it Easy for Anyone to Get to the Latest Deployment

9. Everyone can see what's happening

10. Automate Deployment

Page 7: Adrian marinica   continuous integration in the visual studio world

How do people do it?

Page 8: Adrian marinica   continuous integration in the visual studio world

Flickr

>80 deploys a week >16 deploys a day

>1 deploy every half an hour

Page 9: Adrian marinica   continuous integration in the visual studio world

Google consumer surveys

8 minutes from code commit to production

Page 10: Adrian marinica   continuous integration in the visual studio world

Facebook

2 releases per day

Page 11: Adrian marinica   continuous integration in the visual studio world

Amazon

1 change every 11.6s

Page 12: Adrian marinica   continuous integration in the visual studio world

HP LaserJet Firmware Overall development costs reduced by ~40% Programs under development increased by ~140% Development costs per program reduced by 78% Resources driving innovation increased by 5x

Page 13: Adrian marinica   continuous integration in the visual studio world

This sounds awesome!BUT WHAT’S THE CATCH?

Page 14: Adrian marinica   continuous integration in the visual studio world

Anti Continuous Integration slideSUCCESS OF CONTINUOUS INTEGRATION DEPENDS ON THE STRENGTH OF THE SYSTEM AND THE DEGREE OF TEST-COVERAGE

Time consuming things that you need to do:

Think if you actually need CI Build, configure, automate and maintain the CI system

Write tests to check the quality of the code / build

Page 15: Adrian marinica   continuous integration in the visual studio world

If you want to Continuously Integrate…

… here’s a shortlist:

1. Source control

2. Build

3. Deploy

Page 16: Adrian marinica   continuous integration in the visual studio world

Maintaining the codebaseFIRST THINGS FIRST

Page 17: Adrian marinica   continuous integration in the visual studio world

Git FlowTERMINOLOGY

Branches• master• develop

Feature

Release

Hotfix

BENEFITS

Lightweight branching system

Parallel development

Collaboration

Release staging

Support for hotfixes

Page 18: Adrian marinica   continuous integration in the visual studio world

Git Flow

Page 19: Adrian marinica   continuous integration in the visual studio world

How Flickr does it No additional branches, only a head branch

Flags for features with configurable values:• enabled• disabled• enabled for host X • disabled for host X

if ($cfg.enable_unicorns) {

// do something new and amazing

}

else {

// do the current boring stuff

}

Page 20: Adrian marinica   continuous integration in the visual studio world

Release ManagementA USE CASE

Page 21: Adrian marinica   continuous integration in the visual studio world

Do you / your company? Use Team Foundation Server

Use Visual Studio

Use Test Manager

Develop medium-large scale .NET solutions

Then you have to try out Release Management

Page 22: Adrian marinica   continuous integration in the visual studio world

But how does Release Management help? Team Foundation Server offers:• Work management (boards, stories,

tasks, etc.)• Source Control (TFVC, Git)• Test management• Build system

Team Foundation Server does not offer:• Deploy system

Page 23: Adrian marinica   continuous integration in the visual studio world

CodeCamp use-case Have a web application that you wish to deploy on 3 environments:

Test – for QA

Stage – for simulating the production

Production – offer the changes to the end-user (fully functional and tested)

Page 24: Adrian marinica   continuous integration in the visual studio world

TESTSTAGEPROD

DEV

Developer pushes code

Trigger build

Build serverSource control

Drop location

Drop build

Release Management

Trigger deploy

NotifyApproveNotifyApprove

Page 25: Adrian marinica   continuous integration in the visual studio world

Demo

Page 26: Adrian marinica   continuous integration in the visual studio world

Questions?

Page 27: Adrian marinica   continuous integration in the visual studio world