slaying bugs with gradle and jenkins

Post on 06-May-2015

1.872 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

A comprehensive look at From the New York Android Developers meetup

TRANSCRIPT

Slaying bugsw/ Gradle and Jenkins

David Kay

Wednesday, September 11, 13

Overview

• Gradle

• Jenkins

Wednesday, September 11, 13

Build Tools?

Wednesday, September 11, 13

Wednesday, September 11, 13

Wednesday, September 11, 13

Wednesday, September 11, 13

Wednesday, September 11, 13

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

Wednesday, September 11, 13

Wednesday, September 11, 13

Wednesday, September 11, 13

WTF is ?

• New Build system

• Alternatives

• ant

• maven

• buck

Wednesday, September 11, 13

In other words...

Trust me,

Wednesday, September 11, 13

it’s awesome.

Wednesday, September 11, 13

Wednesday, September 11, 13

Vlad putin is not convinced

Build Tools

• ant

• maven

• buck

Wednesday, September 11, 13

Wednesday, September 11, 13

• Simple

• Mature

• Customizable

What’s Awesome:

Wednesday, September 11, 13

In other words, it’s like duct tape

Wednesday, September 11, 13

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

Wednesday, September 11, 13

It’ll be a great fit

• Lots of work

• No dependency management

What Sucks:

Wednesday, September 11, 13

For me, too much work

Wednesday, September 11, 13

• Mature

• Comprehensive

• Dependency management

• Easy configuration

What’s Awesome:

Wednesday, September 11, 13

Wednesday, September 11, 13

• Massively complex

• Shitty integration with libproject / .aar

• Hard to fix

What Sucks:

Wednesday, September 11, 13

Buck

Wednesday, September 11, 13

Buck

What’s Awesome:

• SOOOO FAST

• Simple

• Easy to compartmentalize project

Wednesday, September 11, 13

Wednesday, September 11, 13

Buck

What Sucks:

• No dependency management

• No support for running tests on device

• Poor documentation

Wednesday, September 11, 13

And the winner is....

Wednesday, September 11, 13

And the winner is....

Wednesday, September 11, 13

HOV!

And the winner is....

Wednesday, September 11, 13

Basics

Wednesday, September 11, 13

Basics

• Built on Groovy

Wednesday, September 11, 13

Wednesday, September 11, 13

Wednesday, September 11, 13

Basics

• Built on Groovy

• gradle files are Groovy files

Wednesday, September 11, 13

So, uh, where were we...

Basics

• gradle files are Groovy files

def square(x) { x * x}

in your build file!

Wednesday, September 11, 13

Hello World

> gradle -q helloHello world!

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

build.gradle

how to run

Wednesday, September 11, 13

LAME

Wednesday, September 11, 13

Hello Java

> gradle assemble

apply plugin: 'java'

build.gradle

how to run

Wednesday, September 11, 13

Not Bad...

Wednesday, September 11, 13

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

Alright!

Wednesday, September 11, 13

Hello Android

src/ main/ res/ value/

layout/ ...

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

Directory Structure

Wednesday, September 11, 13

Multi-Project

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

settings.gradle

project-root/

Wednesday, September 11, 13

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

Test Tools

• Unit tests: Robolectric

• Integration/end-to-end: Robotium

Wednesday, September 11, 13

?Wednesday, September 11, 13

Wednesday, September 11, 13

?Wednesday, September 11, 13

Wednesday, September 11, 13

OKOKHow do we RUN the tests?

Wednesday, September 11, 13

Hello Android

> gradle assemble# compile debug/release/test

> gradle check# run all tests

how to run

Wednesday, September 11, 13

Wednesday, September 11, 13

Nice!But how do we AUTOMATE it?

Wednesday, September 11, 13

Jenkins!!!

Wednesday, September 11, 13

like a certain other butler

Jenkins!!!

• Rock-solid

• Plugins

• Hackable/extensible

What’s Awesome:

Wednesday, September 11, 13

like a certain other butler

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.

Jenkins!!!

• First-time config

• Android Emulator :(

• Resource-intensive

What Sucks:

Wednesday, September 11, 13

Build SystemBuild Slaves

Wednesday, September 11, 13

Build System Ouput

S3 Bucket

Build Errors

Dev Team

Beta Testers

Wednesday, September 11, 13

Wednesday, September 11, 13

Pitfalls

• Headless Emulator

• Android Emulator / Xvnc delay

• -no-audio

Wednesday, September 11, 13

Wednesday, September 11, 13

Comprende!

Wednesday, September 11, 13

Comprende!

WTF?

Wednesday, September 11, 13

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

Wednesday, September 11, 13

CheckStyle

Wednesday, September 11, 13

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

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?

Wednesday, September 11, 13

Bug Hunting

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

Build SystemBuild Slaves

Wednesday, September 11, 13

Build System Ouput

S3 Bucket

Build Errors

Dev Team

Beta Testers

Wednesday, September 11, 13

Thanks!

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

Wednesday, September 11, 13

Recommended Reading

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

Wednesday, September 11, 13

Shameless Pitch

We build apps for iOS & Android

www.gargoyle.co

Wednesday, September 11, 13

Contact

David Y. Kay

@DavidYKay

dk@gargoyle.co

Wednesday, September 11, 13

top related