advanced continuous integration - pygrunn 2014 - dirk zittersteyn

100
Advanced CI

Upload: dirk-zittersteyn

Post on 10-May-2015

1.080 views

Category:

Software


0 download

DESCRIPTION

Presenting a short introduction to version control, and how to set up your tools to make sure you can always deploy. Download the version with annotations here: https://www.dropbox.com/s/nweywk72ztldphf/Advanced%20CI%20Pygrunn%20-%20standalone.pptx Reinout van Rees wrote a summary of the presentation, which can be found on his blog: http://reinout.vanrees.org/weblog/2014/05/09/continuous-integration.html

TRANSCRIPT

Page 1: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Advanced CI

Page 2: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

I’m Dirk Zittersteyn,Software engineer @ since mid 2013

Page 3: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Did some stuff @ before that

Page 4: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

The wonderful world of Continuous Integration.

Page 5: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

A.k.a.:

Getting to green

Page 6: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 7: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Version Control

Page 8: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Is your team larger than 1 person?

Use version control.

Page 9: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Is your team 1 person?

Use version control.

Page 10: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Big (open source) players

Page 11: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Version control can look overly complicated

Page 12: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Codebase

Page 13: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

More awesome

Page 14: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 15: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Working

on feature

X

Built feature Y

Finished feature X

Page 16: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 17: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 18: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Mainline branch

Page 19: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Mainline branch

The mainline stays deliverable

Page 20: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Mainline branch

Branch “New feature”

$ git branch$ hg branch$ svn copy

Page 21: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Mainline branch

Branch “New feature”

Page 22: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Mainline branch

Branch “New feature”

Page 23: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Mainline branch

Branch “New feature”

Integrate your changes

Page 24: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Concurrent work!

Page 25: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Concurrent work

Mainline branch

Branch “New feature”

Branch “Other feature”

Page 26: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 27: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

To a

void

“In

tegr

ation

Hel

l”

Page 28: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

So, are we done?

Page 29: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Concurrency is hard

Page 30: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Meet Charlie.

Page 31: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 32: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 33: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 34: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

My code isn’t

broken!

Page 35: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

My code isn’t

broken!

Page 36: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 37: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

You better check yo buildBefore you wreck yo build

Ice Cube

Page 38: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

!

Mainline should be green

Page 39: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Agreement ≠ RealityMissing testcases “It’s so simple, it won’t break”

Page 40: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Agreement ≠ Reality‘Bad’ commits $ git commit -m ’removed debug statement’

Page 41: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Agreement ≠ RealityQuick fixes w/o running tests $ git commit -m ’server no longer explodes’

Page 42: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

But wait, there’s more!

Page 43: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

+ =

!+ = !

Mainline + Branch = New Mainline

Page 44: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

!+ != ?

Page 45: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Yes!

!+ !=

Page 46: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Yes(ish)!

!+ !=

Page 47: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Assuming everything is okay.e.g.

all environments are the same, nobody is removing tests,

nobody is setting this up to happen

!+ !=

Page 48: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

+ = ?

Page 49: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Mainline:

add(a, b):result = a + breturn result

test_add():assert add(1,1) == 2

+ = ?

Page 50: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Developer A:

add(a, b):+ g.adds += 1

result = a + breturn result

test_add():+ g.adds = 0

assert add(1,1) == 2+ assert g.adds == 1

Developer B:

add(a, b):result = a + b

+ g.adds += 1return result

test_add():+ g.adds = 0

assert add(1,1) == 2+ assert g.adds == 1

Page 51: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Merge A’s changes with mainline

add(a, b):+ g.adds += 1

result = a + breturn result

test_add():+ g.adds = 0

assert add(1,1) == 2+ assert g.adds == 1

Page 52: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Merge B’s changes with mainline

add(a, b):g.adds += 1result = a + b

+ g.adds += 1return result

test_add():g.adds = 0assert add(1,1) == 2assert g.adds == 1

Page 53: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

add(a, b):g.adds += 1result = a + bg.adds += 1return result

test_add():g.adds = 0assert add(1,1) == 2

! assert g.adds == 1

!+ =

Page 54: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

!

Developer A

Developer B

Page 55: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Does this happen?

Page 56: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

if ((err = SSLFreeBuffer(&hashCtx)) != 0) goto fail;if ((err = ReadyHash(&SSLHashSHA1, &hashCtx)) != 0) goto fail;if ((err = SSLHashSHA1.update(&hashCtx, &clientRandom)) != 0) goto fail;if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) goto fail;if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail;! goto fail;if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) goto fail;

At least, that’s what the NSA wants you to think

Page 57: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Just because you're paranoiddoesn't mean that they're not after you

Joseph Heller

Page 58: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Developers shouldn’t change the mainline

Page 59: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Every merge is a change!

Page 60: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 61: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 62: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 63: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 64: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 65: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 66: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Oh merciful Gatekeeper,

please merge my code!

Page 67: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 68: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 69: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Page 70: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

!

Page 71: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 72: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

!

Page 73: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Calm down, Try again

!

Page 74: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Calm down, Try again

!

Page 75: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

What do we use?Our judge, jury and execut(ion)er

Jenkins-CI.org

• Test execution: py.test

• Code mergingGatekeeper

plugin• Developer notification

Fogbugz plugin

.com/ /paylogic-jenkins-plugins

Page 76: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Running on

Bare metal

Page 77: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Running on

+

Bare metal

Page 78: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 79: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Release 1418

Unstable

Page 80: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Unstable

Release 1418

Case 1

Case 2

Page 81: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Unstable

Release 1418

Case 1

Case 2

Page 82: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Unstable

Release 1418

Case 1

Case 2

Page 83: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Unstable

Release 1418

Case 1

Case 2

Page 84: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Unstable

Release 1418

Case 1

Case 2

Page 85: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Unstable

Release 1418

Case 1

Case 2

Page 86: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Unstable

Release 1418

Case 1

Case 2

Page 87: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Unstable

Release 1418

Case 1

Case 2

Page 88: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Unstable

Release 1418

Case 1

Case 2

Page 89: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

Unstable

Release 1418

!

Case 1

Case 2

Page 90: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

!

Unstable

Release 1418

Case 1

Case 2

Page 91: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

!

Unstable

Release 1418

Case 1

Case 2

Page 92: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

!

Unstable

Release 1418

Case 1

Case 2

Page 93: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

!

Unstable

Release 1418

Case 1

Case 2

Page 94: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

!

Unstable

Release 1418

✓Case 1

Case 2

Page 95: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

!

Unstable

Release 1418

Case 1

Case 2

Page 96: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

!

Unstable

Release 1418

Staging

Case 1

Case 2

Page 97: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

!

Unstable

Release 1418

Staging

Release 1420

Case 1

Case 2

Page 98: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn

So, are we done?

Page 99: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn
Page 100: Advanced Continuous Integration - PyGrunn 2014 - Dirk Zittersteyn