slaying bugs with gradle and jenkins
DESCRIPTION
A comprehensive look at From the New York Android Developers meetupTRANSCRIPT
![Page 1: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/1.jpg)
Slaying bugsw/ Gradle and Jenkins
David Kay
Wednesday, September 11, 13
![Page 2: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/2.jpg)
Overview
• Gradle
• Jenkins
Wednesday, September 11, 13
![Page 3: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/3.jpg)
Build Tools?
Wednesday, September 11, 13
![Page 4: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/4.jpg)
Wednesday, September 11, 13
![Page 5: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/5.jpg)
Wednesday, September 11, 13
![Page 6: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/6.jpg)
Wednesday, September 11, 13
![Page 7: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/8.jpg)
Wednesday, September 11, 13
![Page 9: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/9.jpg)
Wednesday, September 11, 13
![Page 10: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/10.jpg)
Wednesday, September 11, 13
![Page 11: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/11.jpg)
WTF is ?
• New Build system
• Alternatives
• ant
• maven
• buck
Wednesday, September 11, 13
In other words...
![Page 12: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/12.jpg)
Trust me,
Wednesday, September 11, 13
![Page 13: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/13.jpg)
it’s awesome.
Wednesday, September 11, 13
![Page 14: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/14.jpg)
Wednesday, September 11, 13
Vlad putin is not convinced
![Page 15: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/15.jpg)
Build Tools
• ant
• maven
• buck
Wednesday, September 11, 13
![Page 16: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/16.jpg)
Wednesday, September 11, 13
![Page 17: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/17.jpg)
• 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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/19.jpg)
Wednesday, September 11, 13
It’ll be a great fit
![Page 20: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/20.jpg)
• 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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/21.jpg)
Wednesday, September 11, 13
![Page 22: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/22.jpg)
• Mature
• Comprehensive
• Dependency management
• Easy configuration
What’s Awesome:
Wednesday, September 11, 13
![Page 23: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/23.jpg)
Wednesday, September 11, 13
![Page 24: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/24.jpg)
• Massively complex
• Shitty integration with libproject / .aar
• Hard to fix
What Sucks:
Wednesday, September 11, 13
![Page 25: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/25.jpg)
Buck
Wednesday, September 11, 13
![Page 26: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/26.jpg)
Buck
What’s Awesome:
• SOOOO FAST
• Simple
• Easy to compartmentalize project
Wednesday, September 11, 13
![Page 27: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/27.jpg)
Wednesday, September 11, 13
![Page 28: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/29.jpg)
And the winner is....
Wednesday, September 11, 13
![Page 30: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/30.jpg)
And the winner is....
Wednesday, September 11, 13
HOV!
![Page 31: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/31.jpg)
And the winner is....
Wednesday, September 11, 13
![Page 32: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/32.jpg)
Basics
Wednesday, September 11, 13
![Page 33: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/33.jpg)
Basics
• Built on Groovy
Wednesday, September 11, 13
![Page 34: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/34.jpg)
Wednesday, September 11, 13
![Page 35: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/35.jpg)
Wednesday, September 11, 13
![Page 36: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/36.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/37.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/38.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/39.jpg)
LAME
Wednesday, September 11, 13
![Page 40: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/40.jpg)
Hello Java
> gradle assemble
apply plugin: 'java'
build.gradle
how to run
Wednesday, September 11, 13
![Page 41: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/41.jpg)
Not Bad...
Wednesday, September 11, 13
![Page 42: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/42.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/43.jpg)
Alright!
Wednesday, September 11, 13
![Page 44: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/44.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/45.jpg)
Multi-Project
include ':HelloGradle', ':vendor:volley'
settings.gradle
project-root/
Wednesday, September 11, 13
![Page 46: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/46.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/47.jpg)
Test Tools
• Unit tests: Robolectric
• Integration/end-to-end: Robotium
Wednesday, September 11, 13
![Page 48: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/48.jpg)
?Wednesday, September 11, 13
![Page 49: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/49.jpg)
Wednesday, September 11, 13
![Page 50: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/50.jpg)
?Wednesday, September 11, 13
![Page 51: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/51.jpg)
Wednesday, September 11, 13
![Page 52: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/52.jpg)
OKOKHow do we RUN the tests?
Wednesday, September 11, 13
![Page 53: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/53.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/54.jpg)
Wednesday, September 11, 13
![Page 55: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/55.jpg)
Nice!But how do we AUTOMATE it?
Wednesday, September 11, 13
![Page 56: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/56.jpg)
Jenkins!!!
Wednesday, September 11, 13
like a certain other butler
![Page 57: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/57.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/58.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/59.jpg)
Jenkins!!!
• First-time config
• Android Emulator :(
• Resource-intensive
What Sucks:
Wednesday, September 11, 13
![Page 60: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/60.jpg)
Build SystemBuild Slaves
Wednesday, September 11, 13
![Page 61: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/61.jpg)
Build System Ouput
S3 Bucket
Build Errors
Dev Team
Beta Testers
Wednesday, September 11, 13
![Page 62: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/62.jpg)
Wednesday, September 11, 13
![Page 63: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/63.jpg)
Pitfalls
• Headless Emulator
• Android Emulator / Xvnc delay
• -no-audio
Wednesday, September 11, 13
![Page 64: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/64.jpg)
Wednesday, September 11, 13
![Page 65: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/65.jpg)
Comprende!
Wednesday, September 11, 13
![Page 66: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/66.jpg)
Comprende!
WTF?
Wednesday, September 11, 13
![Page 67: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/67.jpg)
“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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/68.jpg)
CheckStyle
Wednesday, September 11, 13
![Page 69: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/69.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/70.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/71.jpg)
Wednesday, September 11, 13
Bug Hunting
![Page 72: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/72.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/73.jpg)
Build SystemBuild Slaves
Wednesday, September 11, 13
![Page 74: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/74.jpg)
Build System Ouput
S3 Bucket
Build Errors
Dev Team
Beta Testers
Wednesday, September 11, 13
![Page 75: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/75.jpg)
Thanks!
• http://bit.ly/gradle-jenkins for the code
Wednesday, September 11, 13
![Page 76: Slaying Bugs with Gradle and Jenkins](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/76.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052410/5549b9ccb4c905bc6d8b4e05/html5/thumbnails/77.jpg)
Shameless Pitch
We build apps for iOS & Android
www.gargoyle.co
Wednesday, September 11, 13