+ All Categories
Home > Technology > Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

Date post: 10-May-2015
Category:
Upload: zeroturnaround
View: 2,699 times
Download: 0 times
Share this document with a friend
Popular Tags:
53
©2010 CloudBees, Inc. All Rights Reserved ©2010 CloudBees, Inc. All Rights Reserved Tap into the Power of Slaves with Jenkins Kohsuke Kawaguchi
Transcript
Page 1: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

©2010 CloudBees, Inc. All Rights Reserved

Tap into the Power of Slaves with Jenkins

Kohsuke Kawaguchi

Page 2: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

2 ©2010 CloudBees, Inc. All Rights Reserved

Have You Met Jenkins? h"p://jenkins-­‐ci.org/    

Page 3: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

3 ©2010 CloudBees, Inc. All Rights Reserved

x  64,000  

Page 4: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

4 ©2010 CloudBees, Inc. All Rights Reserved

Page 5: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

5 ©2010 CloudBees, Inc. All Rights Reserved

x  700  

Page 6: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

6 ©2010 CloudBees, Inc. All Rights Reserved

Page 7: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

7 ©2010 CloudBees, Inc. All Rights Reserved

Page 8: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

8 ©2010 CloudBees, Inc. All Rights Reserved

Page 9: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

9 ©2010 CloudBees, Inc. All Rights Reserved

Page 10: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

10 ©2010 CloudBees, Inc. All Rights Reserved

Page 11: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

11 ©2010 CloudBees, Inc. All Rights Reserved

©  Kurt  Löwenstein  EducaConal  Center  InternaConal  Team  h"p://commons.wikimedia.org/wiki/File:DiscriminaCon-­‐Diversity-­‐03.jpg  

CreaCve  Commons  A"ribuCon  2.0  Generic  

Page 12: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

Demo Really, We Made It Easy!

Page 13: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

13 ©2010 CloudBees, Inc. All Rights Reserved

•  Master –  Serves HTTP requests –  Stores all important

info

•  Slaves –  280KB single jar –  Assumed to be

unreliable –  Scale to at least 100

Distributed builds with Jenkins

Master  

slave1  

slave2  

slave3  

slave4  

slave5  

slave6  

slave7  

slave8  

Page 14: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

14 ©2010 CloudBees, Inc. All Rights Reserved

Lots More Ways to Deploy Slaves

•  Via DCOM

Page 15: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

15 ©2010 CloudBees, Inc. All Rights Reserved

Lots More Way To Deploy Slaves

•  Good old shell scripting

$ java -jar slave.jar -jnlpUrl URL

Page 16: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

16 ©2010 CloudBees, Inc. All Rights Reserved

How Flexible Does It Get?

•  Slave agent is a little Java program – Runs locally on the machine that it controls – Access files, fork processes, etc., on behalf of

master

•  Communication with master –  Just needs a bi-di byte stream

•  No shared file system, no network topology constraints, etc

Page 17: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

17 ©2010 CloudBees, Inc. All Rights Reserved

Static Virtual Machines As Build Slaves

•  Allocate lots of identical VMs – Better consistency, lower overhead

•  Curve up 1 big machine to small VMs •  Throw away > maintain

Page 18: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

18 ©2010 CloudBees, Inc. All Rights Reserved

Labels

•  Refer to slaves but not by name

Name:  alpha  Label:  windows  32bit  

Name:  bravo  Label:  linux  32bit  

Name:  charlie  Label:  linux  64bit  

Page 19: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

19 ©2010 CloudBees, Inc. All Rights Reserved

Labels

Name:  alpha  Label:  windows  32bit  

Name:  bravo  Label:  linux  32bit  

Name:  charlie  Label:  linux  64bit  

This  job  needs  to  run  on  “linux”  

Page 20: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

20 ©2010 CloudBees, Inc. All Rights Reserved

Labels

Name:  alpha  Label:  windows  32bit  

Name:  bravo  Label:  linux  32bit  

Name:  charlie  Label:  linux  64bit  

This  job  needs  to  run  on  “linux  &&  32bit”  

Page 21: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

21 ©2010 CloudBees, Inc. All Rights Reserved

More Label Benefits

•  Labels can be anything – Geographic locations – Availability of proprietary software installed

•  Better resource utilization –  Jenkins have maximum freedom

•  Resilient to node addition/removal – Treat servers like livestocks, not like pets

Page 22: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

22 ©2010 CloudBees, Inc. All Rights Reserved

Labels  ↓  

ElasCc  Slaves  

Page 23: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

23 ©2010 CloudBees, Inc. All Rights Reserved

Tracking demand for specific label

Page 24: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

24 ©2010 CloudBees, Inc. All Rights Reserved

Then Adjust Capacity based on it

Page 25: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

25 ©2010 CloudBees, Inc. All Rights Reserved

How?

•  EC2 Plugin – Longest history, most popular

•  JClouds plugin – For OpenStack & CloudStack users, mainly – Unfortunate name, if you ask me

•  Common to both – Multiple image types

Page 26: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

26 ©2010 CloudBees, Inc. All Rights Reserved

Interesting Use Cases Worth Noting

•  Single-use slaves (JClouds) – Used once & destroyed

•  Static but utility-priced slaves (EC2) –  Jenkins stops idle slaves to reduce $$$ – Great for infrequent use

•  Coming soon: spot instances (EC2)

Page 27: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

27 ©2010 CloudBees, Inc. All Rights Reserved

CloudBees DEV@cloud

•  Completely elastic slaves •  Keeps your warm workspace •  Per-minute pricing, not per-hour

Page 28: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

Now that we have more slaves…

#1: parallel test execution

Page 29: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

29 ©2010 CloudBees, Inc. All Rights Reserved

Running Tests in Parallel

Why?

Page 30: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

30 ©2010 CloudBees, Inc. All Rights Reserved

Pre-requisites

Build script that supports test exclusion file

Page 31: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

31 ©2010 CloudBees, Inc. All Rights Reserved

How It Works

Test  Group  #1   Test  Group  #2   Test  Group  #3  

Page 32: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

32 ©2010 CloudBees, Inc. All Rights Reserved

How It Works

foo  #10   Test  Group  #1  

foo  #11   Test  Group  #2  

foo  #12   Test  Goup  #3  

Page 33: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

Demo

Page 34: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

34 ©2010 CloudBees, Inc. All Rights Reserved

For Maven

•  Trick – Turn a build into a Maven repository – Maven profiles for controlling what to run

when

Build   Parallel  Test  

Test  Group  #1  

Test  Group  #2  

Test  Group  #3  

Page 35: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

Demo

Page 36: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

Now that we have more slaves…

#2: activities than span multiple computers

Page 37: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

37 ©2010 CloudBees, Inc. All Rights Reserved

Build Flow Plugin

•  Groovy DSL for coordinating job executions – High-level primitives – Ability to define abstractions

b  =  build(“acme-­‐build”)  guard  {  

 parallel  (      {  build(“acme-­‐test1”,  param1:b.number)  },      {  build(“acme-­‐test2”,  param1:b.number)  }    )  

}  rescue  {    build(“acme-­‐teardown”)  

}  

Page 38: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

38 ©2010 CloudBees, Inc. All Rights Reserved

•  Embed BPMN workflow engine in Jenkins –  Timeout, fork, join, …

•  Workflow is version controlled in Git –  Push to Jenkins to load them up

Jenkow Plugin

Page 39: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

39 ©2010 CloudBees, Inc. All Rights Reserved

Lease and SSH access

•  Lease Jenkins executors for interactive SSH access

Remote  terminal  access  plugin  

Page 40: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

Demo

Page 41: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

41 ©2010 CloudBees, Inc. All Rights Reserved

Lease and SSH access: characteristics

•  Easy coordination between nodes •  Jenkins scheduling aware •  No dependency to individual slaves

Page 42: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

Now that we have more slaves…

#3: validated merge

Page 43: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

43 ©2010 CloudBees, Inc. All Rights Reserved

Did this ever happen to you?

Page 44: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

44 ©2010 CloudBees, Inc. All Rights Reserved

Commit  ↓  Push  ↓  Test  

Page 45: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

45 ©2010 CloudBees, Inc. All Rights Reserved

Commit  ↓  Test  ↓  Push  

Page 46: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

46 ©2010 CloudBees, Inc. All Rights Reserved

More concretely

•  You push to Jenkins •  Jenkins merges it with upstream •  Jenkins tests it •  If good, Jenkins pushes it upstream

upstream  repo  

gate    repo  

Page 47: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

Demo

Page 48: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

48 ©2010 CloudBees, Inc. All Rights Reserved

Conclusions

•  Tame more slaves •  Lots of interesting things you can do

Page 49: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

Now that we have more slaves…

#4: matrix projects

Page 50: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

50 ©2010 CloudBees, Inc. All Rights Reserved

Motivation

•  You often do the same thing with slight variations – Compile C++ code for different platforms – Test with different browsers – Or more generally, think of it as

for (x in [a,b,c]) { for (y in [d,e,f]) { doSomethingWith(x,y,z,..); } }

Page 51: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

51 ©2010 CloudBees, Inc. All Rights Reserved

Model

•  Define axes – One axis ≈ one for loop

•  Choose from pre-defined types of Axis – Slave axis: pick slaves by their names or their

labels •  e.g., linux, solaris, and windows

– Generic axis: arbitrary values exposed as environment variables

Page 52: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

52 ©2010 CloudBees, Inc. All Rights Reserved

Matrix Project Gimmicks

•  Filtering –  Otherwise combinations increase exponentially –  Not all combinations make sense –  Use boolean expression to trim down the size

–  Or tell Jenkins to cut the workload to N% •  Jenkins will thin out the combinations by itself

(label==“windows”).implies(browser==“iexplore”) && (label==“mac”).implies(browser==“safari”)

Page 53: Tap into the power of slaves with Jenkins by Kohsuke Kawaguchi

©2010 CloudBees, Inc. All Rights Reserved

Demo


Recommended