Continuous Deployment and Testing for Mobile Apps The Cloud Revolution Youve Never Heard Of Mark...

Preview:

Citation preview

Continuous Deployment and Testing for Mobile AppsThe Cloud Revolution You’ve Never Heard Of

Mark Prichard

@CloudBees

2

Mark Prichard – My Back Pages

©2011 CloudBees, Inc. All Rights Reserved

• Cambridge University Computer Lab, 1990-1991

• Logica/SHL/CSC: 1991-2000– Integration/Middleware Specialist– Managing Consultant

• BEA Systems, 2000-2008– Senior Architect, EMEA– Director, Java Virtualization

• Oracle, 2008 -2012– WebLogic Platform PM– FMW Web Tier PM

• CloudBees, 2012– Senior Director of Product

Management

@mqprichard mprichard@cloudbees.com

blogs.cloudbees.comClouds, Bees and Blogs

3

• Quick Introduction to CloudBees and PaaS• Building Apps in the Cloud• Continuous Integration for iOS and

Android• Gesture-aware touch testing• Multi-configuration mobile testing• Beta test distribution• Mobile + PaaS models• AWS and the Token Vending Machine

Today’s Agenda

4

• Free and complete for developers• Get started with just a couple of

clicks: all you need is a browser

www.cloudbees.com/signup

Step 1 - Sign Up with CloudBees

5

What’s a Platform?

• Something you can use to – Run your apps– Build your apps– Add services to your apps–Manage your apps

• Plaform-as-a-Service (PaaS) uses elastic, on-demand Cloud resources to do this

6

CloudBees Is a Platform Delivered As A Service

cloudbees.com

JenkinsMaster

Test

Stage

Build

Code

JenkinsExecutor

Forg

e R

ep

osit

ori

es

Git

SVN

mvn

Development Services

(DEV@cloud)

Developer and OperationsInteraction

End User Interaction

Runtime Services

(RUN@cloud)

CloudBees API

Grand Central Web

Console

SDK

SessionClustering

MySQL

Router

Application

PartnerEcosystem

6

©CloudBees, Inc. All Rights Reserved

7

Cloud Terminology

• Infrastructure-as-a-Service (IaaS)– Think: Amazon Web Services–What: Server Instances, Storage

Buckets etc

• Software-as-a-Service (SaaS)– Think: Salesforce.com–What: Packaged Applications (in the

Cloud)

• Plaform-as-a-Service (PaaS)–What: Managed Service for Custom

Apps

8

What is Platform-as-a-Service?

• We run your applications for you• We provide and manage all the

supporting infrastructure needed to run your apps

• We monitor and can scale out your apps

• We provide a full, enterprise-class build environment using Jenkins CI – the world’s #1 OSS continuous integration server

• You write the code and we do all the rest

9

Have You Met Jenkins?

• #1 OSS CI server• Easy to install/use• Extensible via 600+ plugins• Very widely adopted– 47K+ installations

• Very active community– Over 7 years of history, 440+ releases– 600+ plugins, 300+ developers

• CloudBees adds plugins for cloud builds

10

CloudBees Step-by-Stepcloudbees.com

JenkinsMaster

Test

Stage

Build

Code

JenkinsExecutor

Forg

e R

ep

osit

ori

es

Git

SVN

mvn

Development Services

(DEV@cloud)

Developer and OperationsInteraction

End User Interaction

Runtime Services

(RUN@cloud)

CloudBees API

Grand Central Web

Console

SDK

SessionClustering

MySQL

Router

Application

PartnerEcosystem

Multi-Tenanted

Dedicated

Amazon Web Services

10

©CloudBees, Inc. All Rights Reserved

11

What Platform-as-a-Service Is Not

• Commercial, packaged applications don’t usually run on a PaaS

• You don’t need to purchase any hardware or software licenses

• You won’t have to install anything – you just deploy your Java apps to the platform

• If you need to run applications in your own data center, PaaS may be the wrong model

12

Getting Started: CloudBees ClickStarts

©2012 CloudBees, Inc. All Rights Reserved

The easiest way to get started – and learn new technologies

13

cloudbees.com

What’s up with this new framework!

What Did I Just Do?

13

CloudBeesGit

Repo

Database

Build/Test

db:create

App

PartnerServicePartner

Service

CloudBees API

Grand Centra

l Web

Console

app:creategit clone

Jenkins job create

Bind

Bind

Trigger

Deploy

Wow! At yourservice

©2013 CloudBees, Inc. All rights reserved

14

cloudbees.com

Develop Locally, Build in the Cloud

CloudBeesGit

Repo

Database

Build/Test

App

PartnerServicePartner

Service

Bind

Bind

TriggerDeployI want to make

some changes!

Local GitRepo

git clonegi

t com

mit git push

Chan

ges

Wow! At yourservice

First Demo• Complete Application with its full lifecycle, in a

click ClickStart

• No resource other than a laptop, everything else is in the cloud

• No need to deal with IT either!

• You can create your own ClickStart-s if you want

• Templates, etc.

• Pay as you go (to production), scale as you need, full HA, etc. Not just a development workbench!

Second Demo: All Mobile!

• Complete Chess application for iOS & Android

• Covered:

• Where to store app, how to build, how to test, how to distribute, etc.

• NOT Covered:

• iOS/Android app coding itself

• WARNING: testing is especially important for mobile applications – most users won’t give it a second chances!

#fail #fail #fail

Typical flow/pipeline

CodeBuild App

Code

BuildTest

Deploy

TestBetaDeplo

y

GADeplo

y

• Get started fast!

• Team Work• Automatically

push new code to test

#fail

• Build on several targets: iOS, Android, etc.

• If it fails, stop

• Test is costly!• Easy-first, then

increase!• Basic test• Multi-device• Gesture• Etc.

• If it fails, stop

• Deploy in the field on real users

• Gather input• Retrieve

dumps• Etc.• If it fails, stop

• D-Day! • Push apps to

real-life users!• If it fails, stop

Step 1 - CODE• Typically using a mobile-specific environment/IDE

• Store code on Github or at CloudBees (SVN/Git)

• As soon as a code change occurs, validates!

• notification sent to Jenkins, initiate pipeline

• Idea!

• Use a ClickStart to “templatify” a typical mobile project

• License headers, splash screen, login, back-end REST API, etc.

Step 1 - CODE• You can look at a mobile ClickStart:

• Android: https://github.com/mqprichard/stockfishchess-android

• iOS: https://github.com/mqprichard/stockfishchess-ios-app

Step 2 - BUILD• Android

• Easy! Android_[SDK | NDK] available in the cloud, build on linux machine on DEV@cloud

• iOS

• Requires Mac OS X guest to build

• Not available (yet) at CloudBees

• Impossible?

Step 2 – iOS BUILD• Mac Build Attach your own Mac

Jenkins

Master

Jenkins Slave

DEV@cloud

Jenkins Slave

DEV@cloud

Jenkins Slave

DEV@cloud

Jenkins Slave

PRIVATE

Preparing a mobile build slave

• Install Android SDK and NDK, install git (if using it), wget, etc.

• Modify ~/.bash_profile

• Create ANDROID_SDK and ANDROID_NDK

• add A_S/tools and A_S/platform_tools to path

• Install Xcode

• Launch to accept license

• Go in preferences, install command line tools and emulator(s)

• Type “android” on command line

• Add SDK versions + System images (ARM EABI, etc.)

Step 2 – iOS BUILD• Install Jenkins Java CLI agent on Mac

• Launch:

• enjoy

java -jar jenkins-cli.jar -s https://partnerdemo.ci.cloudbees.com -i ~/.ssh/id_rsa customer-managed-slave

-fsroot ~/tests/jenkins/ROOT/ -labels android -labels xcode -executors 4 -name mobile-slave-sacha-laptop

http://wiki.cloudbees.com/bin/view/DEV/Customer+Provided+Slaves

Step 2 - BUILD• Good Reads

• Continuous Deployment for Mobile Apps with Jenkins: iOS Builds

• http://blog.cloudbees.com/2012/09/continuous-deployment-for-mobile-apps.html

• Continuous Integration for Mobile Apps with Jenkins: Android Builds

• http://blog.cloudbees.com/2012/09/continuous-integration-for-mobile-apps.html

• http://www.youtube.com/user/CloudBeesTV

Step 2 - BUILD• Next:

• Details of an iOS build

Replay: http://youtu.be/DinMVVKHwTU

• Details of an Android Build

Replay: http://youtu.be/EOogyOv79NE

Step 3 - TEST• Lots of different testing is possible

• Launching an emulator is level-0 of testing

• SOASTA TouchTest:

• http://youtu.be/ej21BHCxEaI

• http://blog.cloudbees.com/2012/11/continuous-integration-for-mobile-apps.html

SOASTAWrapper

TouchTest - Setup

AppSOASTA

SaaS

register

iOSiOS

iOSregister

TouchTest - Record

SOASTA

Wrapper

App

SOASTASaaS

deploy iOS

Recordgestures

TouchTest – Replay/test

SOASTASaaS

iOSiOS

iOS

Upload App & Replay

Scriptedgestures

RecordResult

Send backResult

CloudBees

Jenkins

InitiateTests

Build Matrix• Testing mobile application requires testing on

lots of different devices, form factors, etc.

• Create one build job per form factor/generation?

• No!

• Jenkins Build Matrix!

Jenkins Build Matrix

http://wiki.cloudbees.com/bin/view/DEV/Matrixed_Jenkins_Android_Builds

Build Matrix – Problem!• Build matrix are very powerful!

• But testing can become costly!

• Fail-Fast

• Organize your testing as a pipeline

• Cheap first, fail-fast

• Expensive as late as possible

Jenkins Promoted Builds

• Build on several targets: iOS, Android, multiple versions, etc.

• If it fails stop• If it succeeds,

PROMOTE BUILD

#fail #fail #fail

BasicTests

Matrix Tests

QA Approva

l

Release

Mgt#fail

Git notif

• Perform basic testing• Mono

device• Cheap

testing

• Deploy application onto Beta Testers’ devices• Zubhium,

TestFlight, Appaloosa

• QA receives notification of promoted build

• Perform QA validation• Code coverage,

etc.• If not OK stop• If OK,

MANUALLY APPROVE

• Real users testing

• Crash dumps• User reports• Kill switch• Etc.

Zubhium

AndroidEmulators

http://blog.cloudbees.com/2012/11/another-look-at-jenkins-promoted-builds.html

• CuckooChess• Earlier, simpler version of

DroidFish – no NDK, so builds are quicker

• Code and Instructions

• We’ll show you how to:• Include the Zubhium SDK• Automate push to Zubhium• Support crash reporting/feedback• Add a deliberate bug!

Quick Demo: Beta Testing with Zubhium

© 2013 CloudBees, Inc. All Rights Reserved

import com.zubhium.ZubhiumSDK;

public class CuckooChess extends Activity implements GUIInterface {

private ZubhiumSDK zubhiumSDK = null;

private final String zubhiumAppKey = "cbbb3f3ef6369131a62b47a96d3ab8";

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

zubhiumSDK = ZubhiumSDK.getZubhiumSDKInstance(this, zubhiumAppKey);

AND</manifest>

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

</manifest>

Adding Zubhium SDK is easy

© 2013 CloudBees, Inc.All Rights Reserved

The Build Pipeline

©2012 CloudBees, Inc. All Rights Reserved

Push to Zubhium

©2012 CloudBees, Inc. All Rights Reserved

iOS Beta Testing – TestFlight and Appaloosa

Mobile + Server?• Makes PaaS value even more obvious

• Use existing Java assets on the back-end

• Communicate through HTTP/etc.

iOS

CloudBeesPaaS

Java App

DB

On-Premise Java App

DB

HTTPS SSL/VPN/HTTPS/etc.

Private Datacente

rApp on

PaaS

To the Internet

VPCApp on

PaaSTo the

Internet

“Legacy”On-

premises resources

Data Copy ?

Private Datacente

rApp on

PaaS

To the Internet

VPCApp on

PaaSTo the

Internet

“Legacy”On-

premises resources

Data Copy

1

2

3

AWS!• Amazon Web Services (AWS) provides plenty

of high-quality services

• Can they be used by mobile phones applications?

RDS DynamoDB SimpleDB ElastiCache

IAM Data Pipeline Flexible Payment S3

Glacier Simple Workflow Simple Queue Simple Notification

Simple Email Etc.

AWS – Not easy• Not advised to let Mobile app directly access

AWS

• AWS account key would need to be embedded and distributed to all users (!)

• Users stepping on each others, ouch!

• Solution?

“Token Vending Machine”

• Mobile app “registers” on a server app and…

• Anonymous OR Identity-based TVM available

• Requests a “token” to the server app

• Limited in SCOPE (S3, Notification, Email, etc.)

• Limited in TIME

• Mobile app uses token to use AWS in a constrained fashion

• Easy!

“Token Vending Machine”

CloudBeesPaaS

TVMApp

AWS S3

1. Request Token

AWS IAM

1.1 Request TokenUsing private AWS Key

2. Uses AWS Service using Token

Want your own TVM?• Easy! Try our TVM ClickStart

• Just put your AWS Key in the TVM and get going!

http://blog.cloudbees.com/2012/12/token-vending-machine-clickstarts-and.html

Conclusion• Next.gen software development is all about

TIME-TO-MARKET and FAST ITERATION

• Mobile applications make it even harder!

• No second chance, wide range of devices

• You cannot win by building your own FACTORY

• Use a PaaS – Focus on added-value

• Try it now! Onward!

Recommended