Slide 1

Slide 1 text

CI @Shazam Edward Harker @edwardharks Francesco Pezzato @petz

Slide 2

Slide 2 text

What is CI/CD ?

Slide 3

Slide 3 text

Master (Cloud machine) Agent (Cloud machine) Agent (Cloud machine) Agent (Physical Machine) Our set up

Slide 4

Slide 4 text

Our set up

Slide 5

Slide 5 text

Our pipeline ./gradlew ./gradlew integrate

Slide 6

Slide 6 text

Environment checks

Slide 7

Slide 7 text

Static analysis

Slide 8

Slide 8 text

Unit Tests

Slide 9

Slide 9 text

UI Acceptance test

Slide 10

Slide 10 text

What is “Fast“? ~700 UI tests ~ 1h 50m on a single device (Nexus5)

Slide 11

Slide 11 text

Fork github.com/shazam/fork apply plugin: "com.shazam.fork" fork { testPackage = "com.shazam.android.tests" poolingStrategy = { .... } } ./gradlew fork ~ 10m across 15 devices

Slide 12

Slide 12 text

Release checks

Slide 13

Slide 13 text

All green?

Slide 14

Slide 14 text

Distribution

Slide 15

Slide 15 text

apply plugin: 'com.shazam.slackdistro' ./gradlew uploadDebugToSlack Anyone interested? Contact us, we are happy to open source it!

Slide 16

Slide 16 text

Flakiness

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

Performance Tests

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

Manual vs Automated Tests

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

GWEN github.com/shazam/gwen Blog post && open source Kotlin porting coming soooon!

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

Summary ● If you don’t have any CI, start small ● No need for Jenkins: there is plenty of online tools ○ Appcenter, Bitrise, CircleCI, etc. ● Physical devices cheaper than remote options in our case ● But with local Jenkins: ○ Fully configurable ○ OSS and not owned by a single company ○ Well adopted, plenty of plugins, large community ○ More secure (no access from internet)

Slide 29

Slide 29 text

Thanks!