SlideShare a Scribd company logo
CONTINUOUS CROSS PLATFORM
MOBILE DEVELOPMENT WITH JENKINS
ADAM PAXTON
PHOTO OP
SLIDES AND NOTES
bit.ly/jenkinsnotes
HELLO
ADAM PAXTON
▸ Freelance Mobile App Developer polancomedia.com
▸ iOS, Android, Appcelerator Titanium
▸ Twitter: @adampax
▸ Github: adampax
GOALS
WHAT WE WANT TO DO TODAY
▸ Will this help our team?
▸ Pros, cons for using Jenkins
▸ Alternatives
▸ Stuff we learned when setting it up.
▸ Be the boss!
RUN THE APP, MAKE SURE THE TESTS PASS, BUILD IT
FOR DISTRIBUTION, UPLOAD IT TO THE BUILD
DISTRIBUTION SERVICE, EMAIL TESTERS. THEN DO IT
ALL AGAIN FOR THE OTHER PLATFORM. AND THEN DO
IT AGAIN TOMORROW FOR THE NEXT FEATURE OR BUG
FIX.
- You, every single day
LET’S GET A BUILD OUT TO TEST…
THAT’S NOT THE HALF OF IT
DON’T FORGET…
▸ Pull the latest commit?
▸ Are we doing unit tests? Did those
run?
▸ Where are those keys?
▸ What version of Xcode did we build
on last time?
▸ Which branch?
▸ What’s the password to the
distribution service?
▸ Who needs this version sent to
them?
▸ Where was the build from yesterday?
▸ Who did that build?
▸ What version of the sdk did they use?
▸ Wait, what was that password again?
▸ No, I meant the keystore password,
sorry.
▸ Err, actually, the alias?
▸ I don’t know what it is, either.
▸ How do I run the tests?
OK, LET’S MAKE SOMEONE THE
BUILD MASTER.
THAT’S A LOT OF STUFF FOR ALL OF US
TO REMEMBER
LET’S HAVE ONE PERSON REMEMBER TO DO ALL THAT STUFF.
PROBLEM SOLVED, RIGHT?
▸ Sometimes multiple builds go out a day (then double that,
since we are cross-platform devs).
▸ Takes our build master’s dev time, and is disruptive.
▸ Multiple people coordinating to do build.
▸ Sometimes we like to go home, or even take vacation!
BUILD A ROBOT.
THERE HAS TO BE A BETTER WAY
FITTER HAPPIER
AUTOMATE THE TEDIOUS BITS
▸ Identify your workflow
▸ Start with the core ‘build’
▸ Expand forward and backward from there
15 STEPS
CURRENT SETUP
PULL
CHANGES
FROM GIT
TEST IOS
TEST
ANDROID
BUILD AD
HOC
UPLOAD
IPA
UPLOAD
APK
EMAIL
TESTERS
Someone asks me 

for a build
…So I ask buildmaster
Build master tells me tests failed,

back to step 1
So who should

get notified?
Do we need to sign the apk?
New devices for the

provisioning profile?
THEN A SHEER DROP
MOVING TO THE BUILD SERVER
TEST IOS, ANDROID

BUILD AD HOC
Jobs
UPLOAD IPA, APK

EMAIL TESTERS
Plugin
PULL CHANGES
FROM GIT
Plugin
Build Server
THEN A SHEER DROP
INTERACT WITH THE BUILD SERVER
Build Server
Trigger a build
Tell us if build failed
Send out the build!

Excelsior!
AUTOMATING WORKFLOW.
WHAT ARE WE REALLY DOING?
JIGSAW FALLING INTO PLACE
DOESN’T THIS FEEL FAMILIAR?
▸ We’re refactoring our workflow.
function doBuild(opts, success, error) {

…

}
MORNING BELL
HOW TO START A BUILD
▸ Watch for changes to a repository
▸ At regular intervals, every x hours
▸ When another build completes
▸ Via URL, cURL POST
▸ etc.
LET DOWN
TELL US IF BUILD FAILED
▸ Usually email logs to us
▸ What test failed?
▸ Blame the last commiter?
▸ Pretty much anything else you want
FUL STOP
POST BUILD ACTIONS
▸ Upload to our build distribution service, email users
▸ Publish it?
▸ Trigger another build
▸ Anything else you want
OK COMPUTER
WHAT WE NEED
▸ A way to have this stuff done for us
▸ We’re cross platform, so it has to build iOS and Android
▸ Mac for iOS
▸ Android, Java, stuff like that
▸ Whatever our x-platform tool requires, like Node.js
▸ We’re all remote, so has to be remotely accessible
NO SURPRISES
HOW ABOUT JENKINS
▸ An automation server
▸ Open source, strong community
▸ Web admin
▸ Insanely flexible (can be overwhelming!)
▸ Probably already a plugin for what you need
▸ jenkins.io
I MIGHT BE WRONG
CONS
▸ Every person’s setup is a unique snowflake
▸ Need to maintain the build server
▸ Flexibility can indeed be overwhelming
▸ Ramp up
USING JENKINS.
WHAT WORKED FOR US, AND WHAT
DIDN’T.
HOW WE USE JENKINS
FIRST, SOME TERMINOLOGY
▸ Job/Project: Any task that you configure Jenkins to run
▸ Build: Result of one run of a job
▸ Build Trigger: How the build is started
▸ Build Step: An action performed by the build, such as run a
command
▸ Post Build Action: What to do when build completes
▸ Workspace: Temporary working directory used for building a job.
▸ Plugin: Extend the functionality of Jenkins w/ core or 3rd party plugins
▸ Pipeline: New(ish)! Define an entire job with a script
HOW WE USE JENKINS
INSTALL
▸ A fairly recent Mac w/ latest OS
▸ Install Java 7 or 8 first
▸ Jenkins version 2 LTS
▸ Mac Installer
▸ Installs Applications/Jenkins/jenkins.war
▸ Creates a launch daemon that runs jenkins
▸ Creates a ‘jenkins’ user that runs the jobs/projects
▸ Puts configuration in users/shared/jenkins/home
HOW WE USE JENKINS
INSTALL
▸ Our first hurdle: the ‘jenkins’ user
▸ All jobs run as jenkins user, so it needs access to any
sdks, folders, etc.
▸ Can either log in as the jenkins user to set up your dev
environment, or do a lot of ‘sudo su’ and ‘chmod’
▸ Both options can work
HOW WE USE JENKINS
MORE INSTALLATION GOTCHAS
▸ Installing developer keys/certificates into keychain
▸ If connected via VNC /remote desktop, the password will fail
silently
▸ Need to connect a physical keyboard to enter pw
▸ Using Node.js with nvm or n didn’t work for us, neither did
Nodejs Jenkins plugin
▸ Installed node.js globally
▸ export PATH=“/usr/local/bin:$PATH" in any build step shell
HOW WE USE JENKINS
MOVE THE CORE BUILD
▸ Install your dev requirements
▸ Xcode
▸ Android sdks
▸ X-Platform sdk
▸ etc
▸ Make sure you can run a build manually, start to finish, as
jenkins user
HOW WE USE JENKINS
THE WEB UI
▸ localhost:8080
▸ Jenkins 2 has improved the default security settings,
prompting you to set up security during Setup Wizard
▸ Home page shows list of jobs and their stats
▸ Nav column for Managing jenkins, users, etc
HOW WE USE JENKINS
ON SECURITY
▸ Not wide-open by default anymore in v2
▸ Create accounts, add to group
▸ For job level access:
▸ ‘Project-based Matrix Authorization Strategy’ sounds a lot more
complex than it really is
▸ Manage Jenkins > Configure Global Security
▸ Then set user/group access on each job
▸ Consider using VPN for remote access
HOW WE USE JENKINS
GLOBAL SETTINGS
▸ Manage Jenkins > Manage Plugins
▸ Github plugin (as opposed to just ‘git’ plugin)
▸ Mask Passwords plugin
▸ TestFairy Plugin
▸ wiki.jenkins-ci.org/display/JENKINS/Plugins
▸ Manage Jenkins > Configure System
▸ Configure email
▸ Git settings
HOW WE USE JENKINS
CREATING A JOB
▸ New Item > Freestyle Project
▸ Security
▸ Parameterized build?
▸ Prompt user for build inputs, or pass via url args
▸ use them as env variables $paramName
▸ SCM
▸ Build Triggers
▸ Build steps
▸ Post-build actions
HOW WE USE JENKINS
CONFIGURING A JOB
HOW WE USE JENKINS
SCM AND TRIGGERS
HOW WE USE JENKINS
BUILD STEPS
HOW WE USE JENKINS
POST BUILD
HOW WE USE JENKINS
AFTER A BUILD
▸ Check the build console output.
▸ You will do many of these.
HOW WE USE JENKINS
ALTERNATIVES
▸ Bamboo - Atlassian
▸ travis-ci.org
▸ circleci.com
▸ codeship.com
▸ buddybuild.com
HOW WE USE JENKINS
NEXT STEPS
▸ Keep automating more items when it makes sense
▸ Ongoing process
▸ fastlane.tools
▸ Pay attention to tests!
▸ Move scripts to source control
▸ Pipelines
HOW WE USE JENKINS
WHAT WE LEARNED
▸ Complete automation or CI wasn’t always best for us
▸ Stepped back from having a commit trigger a build all
the way to the user
▸ Making use of URL/params to trigger builds as needed
▸ We keep finding more stuff to automate
EXIT MUSIC
TAKEAWAYS
▸ Teams of any size will benefit from automation
▸ Save time!
▸ More consistent testing and distribution
▸ Your workflow and methodologies will fit
▸ Start with the core build, move from there
▸ You will find more ways to automate, improve workflow
THANKS Adam

is bit.ly/jenkinsnotes

Cool

More Related Content

What's hot

Jenkins Docker
Jenkins DockerJenkins Docker
Jenkins Docker
Alex Soto
 
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandCI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
Troublemaker Khunpech
 
Game of Codes: the Battle for CI
Game of Codes: the Battle for CIGame of Codes: the Battle for CI
Game of Codes: the Battle for CI
Atlassian
 
Improve your Java Environment with Docker
Improve your Java Environment with DockerImprove your Java Environment with Docker
Improve your Java Environment with Docker
HanoiJUG
 
Dev to Delivery with Puppet, Vagrant and AWS
Dev to Delivery with Puppet, Vagrant and AWSDev to Delivery with Puppet, Vagrant and AWS
Dev to Delivery with Puppet, Vagrant and AWS
Puppet
 
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013 .Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
Tikal Knowledge
 
Jenkins tutorial for beginners
Jenkins tutorial for beginnersJenkins tutorial for beginners
Jenkins tutorial for beginners
BugRaptors
 
DevOps Camp 2017 NYC Local Development using Vagrant by Anthony Alvarez
DevOps Camp 2017 NYC Local Development using Vagrant by Anthony AlvarezDevOps Camp 2017 NYC Local Development using Vagrant by Anthony Alvarez
DevOps Camp 2017 NYC Local Development using Vagrant by Anthony Alvarez
Anthony Alvarez
 
Jenkins CI presentation
Jenkins CI presentationJenkins CI presentation
Jenkins CI presentation
Jonathan Holloway
 
At Your Service: Using Jenkins in Operations
At Your Service: Using Jenkins in OperationsAt Your Service: Using Jenkins in Operations
At Your Service: Using Jenkins in Operations
Mandi Walls
 
OSDC 2017 - Julien Pivotto - Automating Jenkins
OSDC 2017 - Julien Pivotto - Automating JenkinsOSDC 2017 - Julien Pivotto - Automating Jenkins
OSDC 2017 - Julien Pivotto - Automating Jenkins
NETWAYS
 
Bringing Javascript to the Desktop with Electron
Bringing Javascript to the Desktop with ElectronBringing Javascript to the Desktop with Electron
Bringing Javascript to the Desktop with Electron
Nir Noy
 
Production ready word press
Production ready word pressProduction ready word press
Production ready word press
Edmund Turbin
 
node-webkit : Make a magic from your a desktop app to desktop app!
node-webkit : Make a magic from your a desktop app to desktop app!node-webkit : Make a magic from your a desktop app to desktop app!
node-webkit : Make a magic from your a desktop app to desktop app!
욱진 양
 
Jenkins talk at Silicon valley DevOps meetup
Jenkins talk at Silicon valley DevOps meetupJenkins talk at Silicon valley DevOps meetup
Jenkins talk at Silicon valley DevOps meetup
CloudBees
 
vodQA(Pune) 2018 - Visual testing of web apps in headless environment manis...
vodQA(Pune) 2018 - Visual testing of web apps in headless environment   manis...vodQA(Pune) 2018 - Visual testing of web apps in headless environment   manis...
vodQA(Pune) 2018 - Visual testing of web apps in headless environment manis...
vodQA
 
Continuous Deployment at Etsy: A Tale of Two Approaches
Continuous Deployment at Etsy: A Tale of Two ApproachesContinuous Deployment at Etsy: A Tale of Two Approaches
Continuous Deployment at Etsy: A Tale of Two Approaches
Ross Snyder
 
Jenkins Best Practices
Jenkins Best PracticesJenkins Best Practices
Jenkins Best Practices
Gergely Brautigam
 
An Introduction To Jenkins
An Introduction To JenkinsAn Introduction To Jenkins
An Introduction To Jenkins
Knoldus Inc.
 
vodQA(Pune) 2018 - Docker in Testing
vodQA(Pune) 2018 - Docker in TestingvodQA(Pune) 2018 - Docker in Testing
vodQA(Pune) 2018 - Docker in Testing
vodQA
 

What's hot (20)

Jenkins Docker
Jenkins DockerJenkins Docker
Jenkins Docker
 
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandCI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
 
Game of Codes: the Battle for CI
Game of Codes: the Battle for CIGame of Codes: the Battle for CI
Game of Codes: the Battle for CI
 
Improve your Java Environment with Docker
Improve your Java Environment with DockerImprove your Java Environment with Docker
Improve your Java Environment with Docker
 
Dev to Delivery with Puppet, Vagrant and AWS
Dev to Delivery with Puppet, Vagrant and AWSDev to Delivery with Puppet, Vagrant and AWS
Dev to Delivery with Puppet, Vagrant and AWS
 
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013 .Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
 
Jenkins tutorial for beginners
Jenkins tutorial for beginnersJenkins tutorial for beginners
Jenkins tutorial for beginners
 
DevOps Camp 2017 NYC Local Development using Vagrant by Anthony Alvarez
DevOps Camp 2017 NYC Local Development using Vagrant by Anthony AlvarezDevOps Camp 2017 NYC Local Development using Vagrant by Anthony Alvarez
DevOps Camp 2017 NYC Local Development using Vagrant by Anthony Alvarez
 
Jenkins CI presentation
Jenkins CI presentationJenkins CI presentation
Jenkins CI presentation
 
At Your Service: Using Jenkins in Operations
At Your Service: Using Jenkins in OperationsAt Your Service: Using Jenkins in Operations
At Your Service: Using Jenkins in Operations
 
OSDC 2017 - Julien Pivotto - Automating Jenkins
OSDC 2017 - Julien Pivotto - Automating JenkinsOSDC 2017 - Julien Pivotto - Automating Jenkins
OSDC 2017 - Julien Pivotto - Automating Jenkins
 
Bringing Javascript to the Desktop with Electron
Bringing Javascript to the Desktop with ElectronBringing Javascript to the Desktop with Electron
Bringing Javascript to the Desktop with Electron
 
Production ready word press
Production ready word pressProduction ready word press
Production ready word press
 
node-webkit : Make a magic from your a desktop app to desktop app!
node-webkit : Make a magic from your a desktop app to desktop app!node-webkit : Make a magic from your a desktop app to desktop app!
node-webkit : Make a magic from your a desktop app to desktop app!
 
Jenkins talk at Silicon valley DevOps meetup
Jenkins talk at Silicon valley DevOps meetupJenkins talk at Silicon valley DevOps meetup
Jenkins talk at Silicon valley DevOps meetup
 
vodQA(Pune) 2018 - Visual testing of web apps in headless environment manis...
vodQA(Pune) 2018 - Visual testing of web apps in headless environment   manis...vodQA(Pune) 2018 - Visual testing of web apps in headless environment   manis...
vodQA(Pune) 2018 - Visual testing of web apps in headless environment manis...
 
Continuous Deployment at Etsy: A Tale of Two Approaches
Continuous Deployment at Etsy: A Tale of Two ApproachesContinuous Deployment at Etsy: A Tale of Two Approaches
Continuous Deployment at Etsy: A Tale of Two Approaches
 
Jenkins Best Practices
Jenkins Best PracticesJenkins Best Practices
Jenkins Best Practices
 
An Introduction To Jenkins
An Introduction To JenkinsAn Introduction To Jenkins
An Introduction To Jenkins
 
vodQA(Pune) 2018 - Docker in Testing
vodQA(Pune) 2018 - Docker in TestingvodQA(Pune) 2018 - Docker in Testing
vodQA(Pune) 2018 - Docker in Testing
 

Viewers also liked

The Big Easy: Native Mobile App Development with Appcelerator Titanium and Ja...
The Big Easy: Native Mobile App Development with Appcelerator Titanium and Ja...The Big Easy: Native Mobile App Development with Appcelerator Titanium and Ja...
The Big Easy: Native Mobile App Development with Appcelerator Titanium and Ja...
Adam Paxton
 
Intro to Appcelerator Titanium - Code for Fort Lauderdale 2015
Intro to Appcelerator Titanium - Code for Fort Lauderdale 2015Intro to Appcelerator Titanium - Code for Fort Lauderdale 2015
Intro to Appcelerator Titanium - Code for Fort Lauderdale 2015
Adam Paxton
 
Build Custom Maps with Appcelerator Titanium, Mapbox and OpenStreetMap - tiCo...
Build Custom Maps with Appcelerator Titanium, Mapbox and OpenStreetMap - tiCo...Build Custom Maps with Appcelerator Titanium, Mapbox and OpenStreetMap - tiCo...
Build Custom Maps with Appcelerator Titanium, Mapbox and OpenStreetMap - tiCo...
Adam Paxton
 
Trivadis TechEvent 2016 State of the Private Cloud - Oracle Edition by Bernha...
Trivadis TechEvent 2016 State of the Private Cloud - Oracle Edition by Bernha...Trivadis TechEvent 2016 State of the Private Cloud - Oracle Edition by Bernha...
Trivadis TechEvent 2016 State of the Private Cloud - Oracle Edition by Bernha...
Trivadis
 
Performance myths in android
Performance myths in androidPerformance myths in android
Performance myths in android
Javier Gamarra
 
Html5, Native and Platform based Mobile Applications
Html5, Native and Platform based Mobile ApplicationsHtml5, Native and Platform based Mobile Applications
Html5, Native and Platform based Mobile Applications
Yoss Cohen
 
Connected & Disconnected Apps with Azure Mobile Apps
Connected & Disconnected Apps with Azure Mobile AppsConnected & Disconnected Apps with Azure Mobile Apps
Connected & Disconnected Apps with Azure Mobile Apps
Pranav Ainavolu
 
Gradle build automation tool
Gradle   build automation toolGradle   build automation tool
Gradle build automation tool
Ioan Eugen Stan
 
Continuous Integration for your Android projects
Continuous Integration for your Android projectsContinuous Integration for your Android projects
Continuous Integration for your Android projects
Sergii Zhuk
 
Native vs. Mobile Web vs. Hybrid Apps for Mobile Development
Native vs. Mobile Web vs. Hybrid Apps for Mobile DevelopmentNative vs. Mobile Web vs. Hybrid Apps for Mobile Development
Native vs. Mobile Web vs. Hybrid Apps for Mobile Development
Jason Grigsby
 
HTML5 or Android for Mobile Development?
HTML5 or Android for Mobile Development?HTML5 or Android for Mobile Development?
HTML5 or Android for Mobile Development?
Reto Meier
 
Hands on continouous delivery, I TAKE 2014
Hands on continouous delivery, I TAKE 2014Hands on continouous delivery, I TAKE 2014
Hands on continouous delivery, I TAKE 2014
Ioan Eugen Stan
 
20160915 automation with_gradle
20160915 automation with_gradle20160915 automation with_gradle
20160915 automation with_gradle
Yuki Nanri
 
Los vatos
Los vatosLos vatos
Los vatos
losvatoslocos
 
Juc west-how to build a jenkins db the wrong way!
Juc west-how to build a jenkins db the wrong way!Juc west-how to build a jenkins db the wrong way!
Juc west-how to build a jenkins db the wrong way!
Michael Barbine
 
Jenkins Workflow - An Introduction
Jenkins Workflow - An IntroductionJenkins Workflow - An Introduction
Jenkins Workflow - An Introduction
Ben Snape
 
20160929 android taipei Sonatype nexus on amazon ec2
20160929 android taipei Sonatype nexus on amazon ec2 20160929 android taipei Sonatype nexus on amazon ec2
20160929 android taipei Sonatype nexus on amazon ec2
TSE-JU LIN(Louis)
 
Using Jenkins XML API
Using Jenkins XML APIUsing Jenkins XML API
Using Jenkins XML API
Anton Weiss
 
DevOps – SonarQube
DevOps – SonarQubeDevOps – SonarQube
DevOps – SonarQube
Delta-N
 
Track code quality with SonarQube
Track code quality with SonarQubeTrack code quality with SonarQube
Track code quality with SonarQube
Dmytro Patserkovskyi
 

Viewers also liked (20)

The Big Easy: Native Mobile App Development with Appcelerator Titanium and Ja...
The Big Easy: Native Mobile App Development with Appcelerator Titanium and Ja...The Big Easy: Native Mobile App Development with Appcelerator Titanium and Ja...
The Big Easy: Native Mobile App Development with Appcelerator Titanium and Ja...
 
Intro to Appcelerator Titanium - Code for Fort Lauderdale 2015
Intro to Appcelerator Titanium - Code for Fort Lauderdale 2015Intro to Appcelerator Titanium - Code for Fort Lauderdale 2015
Intro to Appcelerator Titanium - Code for Fort Lauderdale 2015
 
Build Custom Maps with Appcelerator Titanium, Mapbox and OpenStreetMap - tiCo...
Build Custom Maps with Appcelerator Titanium, Mapbox and OpenStreetMap - tiCo...Build Custom Maps with Appcelerator Titanium, Mapbox and OpenStreetMap - tiCo...
Build Custom Maps with Appcelerator Titanium, Mapbox and OpenStreetMap - tiCo...
 
Trivadis TechEvent 2016 State of the Private Cloud - Oracle Edition by Bernha...
Trivadis TechEvent 2016 State of the Private Cloud - Oracle Edition by Bernha...Trivadis TechEvent 2016 State of the Private Cloud - Oracle Edition by Bernha...
Trivadis TechEvent 2016 State of the Private Cloud - Oracle Edition by Bernha...
 
Performance myths in android
Performance myths in androidPerformance myths in android
Performance myths in android
 
Html5, Native and Platform based Mobile Applications
Html5, Native and Platform based Mobile ApplicationsHtml5, Native and Platform based Mobile Applications
Html5, Native and Platform based Mobile Applications
 
Connected & Disconnected Apps with Azure Mobile Apps
Connected & Disconnected Apps with Azure Mobile AppsConnected & Disconnected Apps with Azure Mobile Apps
Connected & Disconnected Apps with Azure Mobile Apps
 
Gradle build automation tool
Gradle   build automation toolGradle   build automation tool
Gradle build automation tool
 
Continuous Integration for your Android projects
Continuous Integration for your Android projectsContinuous Integration for your Android projects
Continuous Integration for your Android projects
 
Native vs. Mobile Web vs. Hybrid Apps for Mobile Development
Native vs. Mobile Web vs. Hybrid Apps for Mobile DevelopmentNative vs. Mobile Web vs. Hybrid Apps for Mobile Development
Native vs. Mobile Web vs. Hybrid Apps for Mobile Development
 
HTML5 or Android for Mobile Development?
HTML5 or Android for Mobile Development?HTML5 or Android for Mobile Development?
HTML5 or Android for Mobile Development?
 
Hands on continouous delivery, I TAKE 2014
Hands on continouous delivery, I TAKE 2014Hands on continouous delivery, I TAKE 2014
Hands on continouous delivery, I TAKE 2014
 
20160915 automation with_gradle
20160915 automation with_gradle20160915 automation with_gradle
20160915 automation with_gradle
 
Los vatos
Los vatosLos vatos
Los vatos
 
Juc west-how to build a jenkins db the wrong way!
Juc west-how to build a jenkins db the wrong way!Juc west-how to build a jenkins db the wrong way!
Juc west-how to build a jenkins db the wrong way!
 
Jenkins Workflow - An Introduction
Jenkins Workflow - An IntroductionJenkins Workflow - An Introduction
Jenkins Workflow - An Introduction
 
20160929 android taipei Sonatype nexus on amazon ec2
20160929 android taipei Sonatype nexus on amazon ec2 20160929 android taipei Sonatype nexus on amazon ec2
20160929 android taipei Sonatype nexus on amazon ec2
 
Using Jenkins XML API
Using Jenkins XML APIUsing Jenkins XML API
Using Jenkins XML API
 
DevOps – SonarQube
DevOps – SonarQubeDevOps – SonarQube
DevOps – SonarQube
 
Track code quality with SonarQube
Track code quality with SonarQubeTrack code quality with SonarQube
Track code quality with SonarQube
 

Similar to Continuous Cross Platform Mobile App Development using Jenkins Build Server

自己的 Jenkins 自己來 for Android developer
自己的 Jenkins 自己來  for Android developer自己的 Jenkins 自己來  for Android developer
自己的 Jenkins 自己來 for Android developer
哲偉 楊
 
Jenkins for android developer at TWJUG
Jenkins for android developer at TWJUGJenkins for android developer at TWJUG
Jenkins for android developer at TWJUG
哲偉 楊
 
From devOps to front end Ops, test first
From devOps to front end Ops, test firstFrom devOps to front end Ops, test first
From devOps to front end Ops, test first
Caesar Chi
 
Intro to DevOps
Intro to DevOpsIntro to DevOps
Intro to DevOps
Ernest Mueller
 
London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt Long
London Hashicorp Meetup #8 -  Testing Programmable Infrastructure By Matt LongLondon Hashicorp Meetup #8 -  Testing Programmable Infrastructure By Matt Long
London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt Long
OpenCredo
 
Drone CI
Drone CIDrone CI
Drone CI
Thomas Boerger
 
Deploying software at Scale
Deploying software at ScaleDeploying software at Scale
Deploying software at Scale
Kris Buytaert
 
React Fundamentals - Jakarta JS, Apr 2016
React Fundamentals - Jakarta JS, Apr 2016React Fundamentals - Jakarta JS, Apr 2016
React Fundamentals - Jakarta JS, Apr 2016
Simon Sturmer
 
Grunt understanding
Grunt understandingGrunt understanding
Grunt understanding
Khalid Khan
 
Survival of the Continuist
Survival of the ContinuistSurvival of the Continuist
Survival of the Continuist
Paul Blundell
 
Continuous Integration with Hackintosh
Continuous Integration with HackintoshContinuous Integration with Hackintosh
Continuous Integration with Hackintosh
David Ventura, M.E.T.
 
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Ted Won
 
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
VictorSzoltysek
 
Jenkins
JenkinsJenkins
PhoneGap Day 2016 EU: Creating the Ideal Cordova Dev Environment
PhoneGap Day 2016 EU: Creating the Ideal Cordova Dev EnvironmentPhoneGap Day 2016 EU: Creating the Ideal Cordova Dev Environment
PhoneGap Day 2016 EU: Creating the Ideal Cordova Dev Environment
Ryan J. Salva
 
WordPress automation and CI
WordPress automation and CIWordPress automation and CI
WordPress automation and CI
Ran Bar-Zik
 
Enabling Hybrid Workflows with Docker/Mesos @Orbitz
Enabling Hybrid Workflows with Docker/Mesos @OrbitzEnabling Hybrid Workflows with Docker/Mesos @Orbitz
Enabling Hybrid Workflows with Docker/Mesos @Orbitz
Steve Hoffman
 
Production Ready Javascript With Grunt
Production Ready Javascript With GruntProduction Ready Javascript With Grunt
Production Ready Javascript With Grunt
XB Software, Ltd.
 
Ideal Deployment In .NET World
Ideal Deployment In .NET WorldIdeal Deployment In .NET World
Ideal Deployment In .NET World
Dima Pasko
 
Automated Continuous Delivery for iOS
Automated Continuous Delivery for iOSAutomated Continuous Delivery for iOS
Automated Continuous Delivery for iOS
Edu Caselles
 

Similar to Continuous Cross Platform Mobile App Development using Jenkins Build Server (20)

自己的 Jenkins 自己來 for Android developer
自己的 Jenkins 自己來  for Android developer自己的 Jenkins 自己來  for Android developer
自己的 Jenkins 自己來 for Android developer
 
Jenkins for android developer at TWJUG
Jenkins for android developer at TWJUGJenkins for android developer at TWJUG
Jenkins for android developer at TWJUG
 
From devOps to front end Ops, test first
From devOps to front end Ops, test firstFrom devOps to front end Ops, test first
From devOps to front end Ops, test first
 
Intro to DevOps
Intro to DevOpsIntro to DevOps
Intro to DevOps
 
London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt Long
London Hashicorp Meetup #8 -  Testing Programmable Infrastructure By Matt LongLondon Hashicorp Meetup #8 -  Testing Programmable Infrastructure By Matt Long
London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt Long
 
Drone CI
Drone CIDrone CI
Drone CI
 
Deploying software at Scale
Deploying software at ScaleDeploying software at Scale
Deploying software at Scale
 
React Fundamentals - Jakarta JS, Apr 2016
React Fundamentals - Jakarta JS, Apr 2016React Fundamentals - Jakarta JS, Apr 2016
React Fundamentals - Jakarta JS, Apr 2016
 
Grunt understanding
Grunt understandingGrunt understanding
Grunt understanding
 
Survival of the Continuist
Survival of the ContinuistSurvival of the Continuist
Survival of the Continuist
 
Continuous Integration with Hackintosh
Continuous Integration with HackintoshContinuous Integration with Hackintosh
Continuous Integration with Hackintosh
 
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
Jenkins X Hands-on - automated CI/CD solution for cloud native applications o...
 
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
 
Jenkins
JenkinsJenkins
Jenkins
 
PhoneGap Day 2016 EU: Creating the Ideal Cordova Dev Environment
PhoneGap Day 2016 EU: Creating the Ideal Cordova Dev EnvironmentPhoneGap Day 2016 EU: Creating the Ideal Cordova Dev Environment
PhoneGap Day 2016 EU: Creating the Ideal Cordova Dev Environment
 
WordPress automation and CI
WordPress automation and CIWordPress automation and CI
WordPress automation and CI
 
Enabling Hybrid Workflows with Docker/Mesos @Orbitz
Enabling Hybrid Workflows with Docker/Mesos @OrbitzEnabling Hybrid Workflows with Docker/Mesos @Orbitz
Enabling Hybrid Workflows with Docker/Mesos @Orbitz
 
Production Ready Javascript With Grunt
Production Ready Javascript With GruntProduction Ready Javascript With Grunt
Production Ready Javascript With Grunt
 
Ideal Deployment In .NET World
Ideal Deployment In .NET WorldIdeal Deployment In .NET World
Ideal Deployment In .NET World
 
Automated Continuous Delivery for iOS
Automated Continuous Delivery for iOSAutomated Continuous Delivery for iOS
Automated Continuous Delivery for iOS
 

Recently uploaded

Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
Remote DBA Services
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
socradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdfsocradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdf
SOCRadar
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
Gerardo Pardo-Castellote
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
Ayan Halder
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptxLORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
lorraineandreiamcidl
 
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesE-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
Quickdice ERP
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
brainerhub1
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
What is Master Data Management by PiLog Group
What is Master Data Management by PiLog GroupWhat is Master Data Management by PiLog Group
What is Master Data Management by PiLog Group
aymanquadri279
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
Peter Muessig
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
Green Software Development
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Envertis Software Solutions
 

Recently uploaded (20)

Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
socradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdfsocradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdf
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptxLORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
 
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesE-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
What is Master Data Management by PiLog Group
What is Master Data Management by PiLog GroupWhat is Master Data Management by PiLog Group
What is Master Data Management by PiLog Group
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
 

Continuous Cross Platform Mobile App Development using Jenkins Build Server

  • 1. CONTINUOUS CROSS PLATFORM MOBILE DEVELOPMENT WITH JENKINS ADAM PAXTON
  • 2. PHOTO OP SLIDES AND NOTES bit.ly/jenkinsnotes
  • 3. HELLO ADAM PAXTON ▸ Freelance Mobile App Developer polancomedia.com ▸ iOS, Android, Appcelerator Titanium ▸ Twitter: @adampax ▸ Github: adampax
  • 4. GOALS WHAT WE WANT TO DO TODAY ▸ Will this help our team? ▸ Pros, cons for using Jenkins ▸ Alternatives ▸ Stuff we learned when setting it up. ▸ Be the boss!
  • 5. RUN THE APP, MAKE SURE THE TESTS PASS, BUILD IT FOR DISTRIBUTION, UPLOAD IT TO THE BUILD DISTRIBUTION SERVICE, EMAIL TESTERS. THEN DO IT ALL AGAIN FOR THE OTHER PLATFORM. AND THEN DO IT AGAIN TOMORROW FOR THE NEXT FEATURE OR BUG FIX. - You, every single day LET’S GET A BUILD OUT TO TEST…
  • 6. THAT’S NOT THE HALF OF IT DON’T FORGET… ▸ Pull the latest commit? ▸ Are we doing unit tests? Did those run? ▸ Where are those keys? ▸ What version of Xcode did we build on last time? ▸ Which branch? ▸ What’s the password to the distribution service? ▸ Who needs this version sent to them? ▸ Where was the build from yesterday? ▸ Who did that build? ▸ What version of the sdk did they use? ▸ Wait, what was that password again? ▸ No, I meant the keystore password, sorry. ▸ Err, actually, the alias? ▸ I don’t know what it is, either. ▸ How do I run the tests?
  • 7. OK, LET’S MAKE SOMEONE THE BUILD MASTER. THAT’S A LOT OF STUFF FOR ALL OF US TO REMEMBER
  • 8. LET’S HAVE ONE PERSON REMEMBER TO DO ALL THAT STUFF. PROBLEM SOLVED, RIGHT? ▸ Sometimes multiple builds go out a day (then double that, since we are cross-platform devs). ▸ Takes our build master’s dev time, and is disruptive. ▸ Multiple people coordinating to do build. ▸ Sometimes we like to go home, or even take vacation!
  • 9. BUILD A ROBOT. THERE HAS TO BE A BETTER WAY
  • 10. FITTER HAPPIER AUTOMATE THE TEDIOUS BITS ▸ Identify your workflow ▸ Start with the core ‘build’ ▸ Expand forward and backward from there
  • 11. 15 STEPS CURRENT SETUP PULL CHANGES FROM GIT TEST IOS TEST ANDROID BUILD AD HOC UPLOAD IPA UPLOAD APK EMAIL TESTERS Someone asks me 
 for a build …So I ask buildmaster Build master tells me tests failed,
 back to step 1 So who should
 get notified? Do we need to sign the apk? New devices for the
 provisioning profile?
  • 12. THEN A SHEER DROP MOVING TO THE BUILD SERVER TEST IOS, ANDROID
 BUILD AD HOC Jobs UPLOAD IPA, APK
 EMAIL TESTERS Plugin PULL CHANGES FROM GIT Plugin Build Server
  • 13. THEN A SHEER DROP INTERACT WITH THE BUILD SERVER Build Server Trigger a build Tell us if build failed Send out the build!
 Excelsior!
  • 14. AUTOMATING WORKFLOW. WHAT ARE WE REALLY DOING?
  • 15. JIGSAW FALLING INTO PLACE DOESN’T THIS FEEL FAMILIAR? ▸ We’re refactoring our workflow. function doBuild(opts, success, error) {
 …
 }
  • 16. MORNING BELL HOW TO START A BUILD ▸ Watch for changes to a repository ▸ At regular intervals, every x hours ▸ When another build completes ▸ Via URL, cURL POST ▸ etc.
  • 17. LET DOWN TELL US IF BUILD FAILED ▸ Usually email logs to us ▸ What test failed? ▸ Blame the last commiter? ▸ Pretty much anything else you want
  • 18. FUL STOP POST BUILD ACTIONS ▸ Upload to our build distribution service, email users ▸ Publish it? ▸ Trigger another build ▸ Anything else you want
  • 19. OK COMPUTER WHAT WE NEED ▸ A way to have this stuff done for us ▸ We’re cross platform, so it has to build iOS and Android ▸ Mac for iOS ▸ Android, Java, stuff like that ▸ Whatever our x-platform tool requires, like Node.js ▸ We’re all remote, so has to be remotely accessible
  • 20. NO SURPRISES HOW ABOUT JENKINS ▸ An automation server ▸ Open source, strong community ▸ Web admin ▸ Insanely flexible (can be overwhelming!) ▸ Probably already a plugin for what you need ▸ jenkins.io
  • 21. I MIGHT BE WRONG CONS ▸ Every person’s setup is a unique snowflake ▸ Need to maintain the build server ▸ Flexibility can indeed be overwhelming ▸ Ramp up
  • 22. USING JENKINS. WHAT WORKED FOR US, AND WHAT DIDN’T.
  • 23. HOW WE USE JENKINS FIRST, SOME TERMINOLOGY ▸ Job/Project: Any task that you configure Jenkins to run ▸ Build: Result of one run of a job ▸ Build Trigger: How the build is started ▸ Build Step: An action performed by the build, such as run a command ▸ Post Build Action: What to do when build completes ▸ Workspace: Temporary working directory used for building a job. ▸ Plugin: Extend the functionality of Jenkins w/ core or 3rd party plugins ▸ Pipeline: New(ish)! Define an entire job with a script
  • 24. HOW WE USE JENKINS INSTALL ▸ A fairly recent Mac w/ latest OS ▸ Install Java 7 or 8 first ▸ Jenkins version 2 LTS ▸ Mac Installer ▸ Installs Applications/Jenkins/jenkins.war ▸ Creates a launch daemon that runs jenkins ▸ Creates a ‘jenkins’ user that runs the jobs/projects ▸ Puts configuration in users/shared/jenkins/home
  • 25. HOW WE USE JENKINS INSTALL ▸ Our first hurdle: the ‘jenkins’ user ▸ All jobs run as jenkins user, so it needs access to any sdks, folders, etc. ▸ Can either log in as the jenkins user to set up your dev environment, or do a lot of ‘sudo su’ and ‘chmod’ ▸ Both options can work
  • 26. HOW WE USE JENKINS MORE INSTALLATION GOTCHAS ▸ Installing developer keys/certificates into keychain ▸ If connected via VNC /remote desktop, the password will fail silently ▸ Need to connect a physical keyboard to enter pw ▸ Using Node.js with nvm or n didn’t work for us, neither did Nodejs Jenkins plugin ▸ Installed node.js globally ▸ export PATH=“/usr/local/bin:$PATH" in any build step shell
  • 27. HOW WE USE JENKINS MOVE THE CORE BUILD ▸ Install your dev requirements ▸ Xcode ▸ Android sdks ▸ X-Platform sdk ▸ etc ▸ Make sure you can run a build manually, start to finish, as jenkins user
  • 28. HOW WE USE JENKINS THE WEB UI ▸ localhost:8080 ▸ Jenkins 2 has improved the default security settings, prompting you to set up security during Setup Wizard ▸ Home page shows list of jobs and their stats ▸ Nav column for Managing jenkins, users, etc
  • 29. HOW WE USE JENKINS ON SECURITY ▸ Not wide-open by default anymore in v2 ▸ Create accounts, add to group ▸ For job level access: ▸ ‘Project-based Matrix Authorization Strategy’ sounds a lot more complex than it really is ▸ Manage Jenkins > Configure Global Security ▸ Then set user/group access on each job ▸ Consider using VPN for remote access
  • 30. HOW WE USE JENKINS GLOBAL SETTINGS ▸ Manage Jenkins > Manage Plugins ▸ Github plugin (as opposed to just ‘git’ plugin) ▸ Mask Passwords plugin ▸ TestFairy Plugin ▸ wiki.jenkins-ci.org/display/JENKINS/Plugins ▸ Manage Jenkins > Configure System ▸ Configure email ▸ Git settings
  • 31. HOW WE USE JENKINS CREATING A JOB ▸ New Item > Freestyle Project ▸ Security ▸ Parameterized build? ▸ Prompt user for build inputs, or pass via url args ▸ use them as env variables $paramName ▸ SCM ▸ Build Triggers ▸ Build steps ▸ Post-build actions
  • 32. HOW WE USE JENKINS CONFIGURING A JOB
  • 33. HOW WE USE JENKINS SCM AND TRIGGERS
  • 34. HOW WE USE JENKINS BUILD STEPS
  • 35. HOW WE USE JENKINS POST BUILD
  • 36. HOW WE USE JENKINS AFTER A BUILD ▸ Check the build console output. ▸ You will do many of these.
  • 37. HOW WE USE JENKINS ALTERNATIVES ▸ Bamboo - Atlassian ▸ travis-ci.org ▸ circleci.com ▸ codeship.com ▸ buddybuild.com
  • 38. HOW WE USE JENKINS NEXT STEPS ▸ Keep automating more items when it makes sense ▸ Ongoing process ▸ fastlane.tools ▸ Pay attention to tests! ▸ Move scripts to source control ▸ Pipelines
  • 39. HOW WE USE JENKINS WHAT WE LEARNED ▸ Complete automation or CI wasn’t always best for us ▸ Stepped back from having a commit trigger a build all the way to the user ▸ Making use of URL/params to trigger builds as needed ▸ We keep finding more stuff to automate
  • 40. EXIT MUSIC TAKEAWAYS ▸ Teams of any size will benefit from automation ▸ Save time! ▸ More consistent testing and distribution ▸ Your workflow and methodologies will fit ▸ Start with the core build, move from there ▸ You will find more ways to automate, improve workflow