Date post: | 06-May-2015 |
Category: |
Technology |
Upload: | david-kay |
View: | 1,876 times |
Download: | 5 times |
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