slaying bugs with gradle and jenkins

78
Slaying bugs w/ Gradle and Jenkins David Kay Wednesday, September 11, 13

Upload: david-kay

Post on 06-May-2015

1.872 views

Category:

Technology


5 download

DESCRIPTION

A comprehensive look at From the New York Android Developers meetup

TRANSCRIPT

Page 1: Slaying Bugs with Gradle and Jenkins

Slaying bugsw/ Gradle and Jenkins

David Kay

Wednesday, September 11, 13

Page 2: Slaying Bugs with Gradle and Jenkins

Overview

• Gradle

• Jenkins

Wednesday, September 11, 13

Page 3: Slaying Bugs with Gradle and Jenkins

Build Tools?

Wednesday, September 11, 13

Page 4: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 5: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 6: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 7: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Unless your name is John Carmack, you aren’t.So what are we left with?

Page 8: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 9: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 10: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 11: Slaying Bugs with Gradle and Jenkins

WTF is ?

• New Build system

• Alternatives

• ant

• maven

• buck

Wednesday, September 11, 13

In other words...

Page 12: Slaying Bugs with Gradle and Jenkins

Trust me,

Wednesday, September 11, 13

Page 13: Slaying Bugs with Gradle and Jenkins

it’s awesome.

Wednesday, September 11, 13

Page 14: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Vlad putin is not convinced

Page 15: Slaying Bugs with Gradle and Jenkins

Build Tools

• ant

• maven

• buck

Wednesday, September 11, 13

Page 16: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 17: Slaying Bugs with Gradle and Jenkins

• Simple

• Mature

• Customizable

What’s Awesome:

Wednesday, September 11, 13

In other words, it’s like duct tape

Page 18: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

If you’re the kind of person to build a prom dress out of duct tape

Page 19: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

It’ll be a great fit

Page 20: Slaying Bugs with Gradle and Jenkins

• Lots of work

• No dependency management

What Sucks:

Wednesday, September 11, 13

For me, too much work

Page 21: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 22: Slaying Bugs with Gradle and Jenkins

• Mature

• Comprehensive

• Dependency management

• Easy configuration

What’s Awesome:

Wednesday, September 11, 13

Page 23: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 24: Slaying Bugs with Gradle and Jenkins

• Massively complex

• Shitty integration with libproject / .aar

• Hard to fix

What Sucks:

Wednesday, September 11, 13

Page 25: Slaying Bugs with Gradle and Jenkins

Buck

Wednesday, September 11, 13

Page 26: Slaying Bugs with Gradle and Jenkins

Buck

What’s Awesome:

• SOOOO FAST

• Simple

• Easy to compartmentalize project

Wednesday, September 11, 13

Page 27: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 28: Slaying Bugs with Gradle and Jenkins

Buck

What Sucks:

• No dependency management

• No support for running tests on device

• Poor documentation

Wednesday, September 11, 13

Page 29: Slaying Bugs with Gradle and Jenkins

And the winner is....

Wednesday, September 11, 13

Page 30: Slaying Bugs with Gradle and Jenkins

And the winner is....

Wednesday, September 11, 13

HOV!

Page 31: Slaying Bugs with Gradle and Jenkins

And the winner is....

Wednesday, September 11, 13

Page 32: Slaying Bugs with Gradle and Jenkins

Basics

Wednesday, September 11, 13

Page 33: Slaying Bugs with Gradle and Jenkins

Basics

• Built on Groovy

Wednesday, September 11, 13

Page 34: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 35: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 36: Slaying Bugs with Gradle and Jenkins

Basics

• Built on Groovy

• gradle files are Groovy files

Wednesday, September 11, 13

So, uh, where were we...

Page 37: Slaying Bugs with Gradle and Jenkins

Basics

• gradle files are Groovy files

def square(x) { x * x}

in your build file!

Wednesday, September 11, 13

Page 38: Slaying Bugs with Gradle and Jenkins

Hello World

> gradle -q helloHello world!

task hello { doLast { println 'Hello world!' }}

build.gradle

how to run

Wednesday, September 11, 13

Page 39: Slaying Bugs with Gradle and Jenkins

LAME

Wednesday, September 11, 13

Page 40: Slaying Bugs with Gradle and Jenkins

Hello Java

> gradle assemble

apply plugin: 'java'

build.gradle

how to run

Wednesday, September 11, 13

Page 41: Slaying Bugs with Gradle and Jenkins

Not Bad...

Wednesday, September 11, 13

Page 42: Slaying Bugs with Gradle and Jenkins

Hello Android

buildscript { dependencies { classpath 'com.android.tools.build:gradle:0.5.6' }}

apply plugin: 'android'

android { compileSdkVersion 17}

build.gradle

> gradle assemblehow to run

Wednesday, September 11, 13

Page 43: Slaying Bugs with Gradle and Jenkins

Alright!

Wednesday, September 11, 13

Page 44: Slaying Bugs with Gradle and Jenkins

Hello Android

src/ main/ res/ value/

layout/ ...

java/ com/ ... test/ res/ .... src/ ....

Directory Structure

Wednesday, September 11, 13

Page 45: Slaying Bugs with Gradle and Jenkins

Multi-Project

include ':HelloGradle', ':vendor:volley'

settings.gradle

project-root/

Wednesday, September 11, 13

Page 46: Slaying Bugs with Gradle and Jenkins

Dependencies

...

dependencies { // from a local jar compile files('jackson.jar') // from maven central/etc compile 'com.jayway.android.robotium:robotium-solo:4.2' // from a library project compile project(':vendor:volley')}

...

build.gradle

Wednesday, September 11, 13

Page 47: Slaying Bugs with Gradle and Jenkins

Test Tools

• Unit tests: Robolectric

• Integration/end-to-end: Robotium

Wednesday, September 11, 13

Page 48: Slaying Bugs with Gradle and Jenkins

?Wednesday, September 11, 13

Page 49: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 50: Slaying Bugs with Gradle and Jenkins

?Wednesday, September 11, 13

Page 51: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 52: Slaying Bugs with Gradle and Jenkins

OKOKHow do we RUN the tests?

Wednesday, September 11, 13

Page 53: Slaying Bugs with Gradle and Jenkins

Hello Android

> gradle assemble# compile debug/release/test

> gradle check# run all tests

how to run

Wednesday, September 11, 13

Page 54: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 55: Slaying Bugs with Gradle and Jenkins

Nice!But how do we AUTOMATE it?

Wednesday, September 11, 13

Page 56: Slaying Bugs with Gradle and Jenkins

Jenkins!!!

Wednesday, September 11, 13

like a certain other butler

Page 57: Slaying Bugs with Gradle and Jenkins

Jenkins!!!

• Rock-solid

• Plugins

• Hackable/extensible

What’s Awesome:

Wednesday, September 11, 13

like a certain other butler

Page 58: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Won’t tell you stories about Burmese jewel bandits....but at least he won’t walk out on you to prove a point.

Page 59: Slaying Bugs with Gradle and Jenkins

Jenkins!!!

• First-time config

• Android Emulator :(

• Resource-intensive

What Sucks:

Wednesday, September 11, 13

Page 60: Slaying Bugs with Gradle and Jenkins

Build SystemBuild Slaves

Wednesday, September 11, 13

Page 61: Slaying Bugs with Gradle and Jenkins

Build System Ouput

S3 Bucket

Build Errors

Dev Team

Beta Testers

Wednesday, September 11, 13

Page 62: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 63: Slaying Bugs with Gradle and Jenkins

Pitfalls

• Headless Emulator

• Android Emulator / Xvnc delay

• -no-audio

Wednesday, September 11, 13

Page 64: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Page 65: Slaying Bugs with Gradle and Jenkins

Comprende!

Wednesday, September 11, 13

Page 66: Slaying Bugs with Gradle and Jenkins

Comprende!

WTF?

Wednesday, September 11, 13

Page 67: Slaying Bugs with Gradle and Jenkins

“How a programmer reads your resume” - Steve Hanovhttp://stevehanov.ca/blog/resume_comic.png

Wednesday, September 11, 13

Page 68: Slaying Bugs with Gradle and Jenkins

CheckStyle

Wednesday, September 11, 13

Page 69: Slaying Bugs with Gradle and Jenkins

CheckStyle<module name="Checker"> <module name="TreeWalker">

<property name="tabWidth" value="2"/> <module name="Indentation"> <property name="caseIndent" value="2"/> <property name="basicOffset" value="2"/> </module>

<module name="GenericWhitespace"/> <module name="AvoidStarImport"/> <module name="ConstantName"/> <module name="EmptyBlock"/>

<module name="MemberName"/> <module name="ConstantName"/> <module name="MethodName"/> <module name="TypeName"/> </module>

<module name="StrictDuplicateCode"> <property name="min" value="15"/> </module></module>

Wednesday, September 11, 13

Page 70: Slaying Bugs with Gradle and Jenkins

defaultConfig { versionName '0.1.1' versionCode System.env.BUILD_NUMBER ? "$System.env.BUILD_NUMBER".toInteger() : 2}

build.gradle

Auto-build Number

Wednesday, September 11, 13

Why is this relevant?

Page 71: Slaying Bugs with Gradle and Jenkins

Wednesday, September 11, 13

Bug Hunting

Page 72: Slaying Bugs with Gradle and Jenkins

defaultConfig { versionName '0.1.1' versionCode System.env.BUILD_NUMBER ? "$System.env.BUILD_NUMBER".toInteger() : 2}

build.gradle

Auto-build Number

Wednesday, September 11, 13

Page 73: Slaying Bugs with Gradle and Jenkins

Build SystemBuild Slaves

Wednesday, September 11, 13

Page 74: Slaying Bugs with Gradle and Jenkins

Build System Ouput

S3 Bucket

Build Errors

Dev Team

Beta Testers

Wednesday, September 11, 13

Page 75: Slaying Bugs with Gradle and Jenkins

Thanks!

• http://bit.ly/gradle-jenkins for the code

Wednesday, September 11, 13

Page 76: Slaying Bugs with Gradle and Jenkins

Recommended Reading

Android Gradle Plugin User GuideGrowing Object-Oriented Software, Guided By Tests

Wednesday, September 11, 13

Page 77: Slaying Bugs with Gradle and Jenkins

Shameless Pitch

We build apps for iOS & Android

www.gargoyle.co

Wednesday, September 11, 13

Page 78: Slaying Bugs with Gradle and Jenkins

Contact

David Y. Kay

@DavidYKay

[email protected]

Wednesday, September 11, 13