Top Banner
©2015 CloudBees, Inc. All Rights Reserved ©2015 CloudBees, Inc. All Rights Reserved Workflow in Jenkins Kohsuke Kawaguchi / CTO, CloudBees, Inc. [email protected] / @kohsukekawa Jesse Glick / Developer, CloudBees, Inc. @tyvole
28

Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

Jul 14, 2015

Download

Technology

jgcloudbees
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved ©2015 CloudBees, Inc. All Rights Reserved

Workflow in JenkinsKohsuke Kawaguchi / CTO, CloudBees, [email protected] / @kohsukekawa

Jesse Glick / Developer, CloudBees, Inc.@tyvole

Page 2: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Page 3: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Use Cases: orchestrated activities

• Multi-stage continuous deployment pipeline• Run part of build with a temporary server• Blue/green deployment + auto commit/abort• Parallel tests with automatic sharding• Automatic per-branch jobs (à la Literate)

Page 4: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Characteristics

• Complex pipelines involving multiple stages• Non-sequential logic such as loops and forks• Long-running builds must survive outages• Interaction with humans pauses, input• Restartable builds in case of a transient error• Reusable definitions to avoid duplication• Comprehensible scripts one clear definition

Page 5: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Page 6: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Page 7: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Page 8: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

node('linux') {stage 'Dev'

git 'https://github.com/me/app.git'

sh "${tool 'Maven 3'}/bin/mvn install"

parallel regr: {sh './regression-test.sh'},

perf: {sh './performance-test.sh'}

input 'All set?'

stage name: 'Prod', concurrency: 1

sh './deploy.sh'

}

Page 9: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Key features (what I already covered)

• Entire flow is one concise Groovy script– for-loops, try-finally, fork-join, etc.

• Can restart Jenkins while flow is running• Human input/approval integrated into flow

Page 10: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

More key features

• Allocate slave nodes and workspaces– as many as you like, when you like

• Standard project concepts: SCM, artifacts, …

Page 11: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Design: workflow in VCS (1)

• Load the script from another file

• In repository

node { git 'https://github.com/acme/foo.git' load 'jenkins.groovy'}

pom.xmlsrcjenkins.groovy...

Page 12: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Design: workflow in VCS (2)

• Load the whole script from repository• Job definition contains no Groovy

Page 13: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Design: workflow in VCS (3)

• Shared workflow scripts/utilities in Git

• Your job just needs to have this

Git

org.acme.MyWorkflow.run(this)

Page 14: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Stages (aka James Nord operator)• Pipeline throttling primitive• Special semaphore: only newest build may

wait

time

builds

build

build

build

selenium tests

selenium tests

selenium tests

build selenium tests

deployment

deployment

build

build selenium tests deployment

all but deployment phase runs in parallel

deployment still runs as fast as it can

canceled

Page 15: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Build #153Build #153

Page 16: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

foo()

void foo() {try {

sh 'sleep 1h'} finally {

sh 'rm -rf *.tmp'}

}

Page 17: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Resumption of Groovy flows

• Transformed to “continuation-passing style”• Run on custom interpreter of Groovy

– on master; includes security checks• State of program saved at each pause point• Variables serialized and restored after restart

Page 18: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Resumed builds to the user

• It “just works”• (Serializable) local variables restored too• Shell-like steps survive restart

– Reconnection of slave, too

Page 19: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Page 20: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Jenkins Enterprise by CloudBees

• CloudBees’ value-added Jenkins distro– Support & additional plugins

• Resume from checkpoint– Can pick up artifacts from original build– No need to rerun earlier expensive steps

• Visualization– “Stage” view of pipelines– More planned later

• Templates– Define script in template, use attributes

Page 21: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Demo

Page 22: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Still to come

• more plugin integrations• lots of little RFEs & bugs• easier script syntax, editing• workspace management• multibranch projects?• matrix project equivalent?• much more, tracked in JIRA

Page 23: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Status

• Open for contribution• github.com/jenkinsci/workflow-plugin• 1.3 current release• Requires Jenkins 1.580.x+ today• Under active development

Page 24: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Summary

• Simplifies complex orchestration• Define everything in single job• Workflow as Groovy code• Survives JVM loss, and even restartable• Extensible

• github.com/jenkinsci/workflow-plugin

Page 25: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Page 26: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Design: flows

• persistent record of execution• directed acyclic graph of nodes• some nodes represent one step• others indicate block start/stop structure• nodes may have associated metadata

– console log fragment contributes to main log

• pluggable visualizations for different views

Page 27: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Design: steps

• standalone API for asynchronous build steps• context serves as an identifier & callback

– also offers logger, build, workspace, &c.

• support for block-structured steps– invoke body 0+ times with revised context

• standard step for “durable” shell/batch scripts• standard steps for SCMs (git, svn, other)

– >1 SCM per build possible

Page 28: Jenkins Workflow Summit London 2015: Kohsuke/Jesse slides

©2015 CloudBees, Inc. All Rights Reserved

Design: interoperability

• run on existing Jenkins slaves• SCM plugins supported with modest changes• some existing build steps & publishers

– “build wrappers” coming (1.599+)• trigger existing jobs• standard build history, artifacts• needs Jenkins 1.580.x or later

– features factored out of standard projects