getting out of the job jungle with jenkins

51
GETTING OUT OF THE JOB JUNGLE @DamienCoraboeuf

Upload: sonatype

Post on 15-Apr-2017

123 views

Category:

Software


2 download

TRANSCRIPT

GETTING OUT OF THE JOB JUNGLE

@DamienCoraboeuf

WHO AM I?

▸ Damien Coraboeuf (@DamienCoraboeuf)

▸ Born to Java in 1996

▸ Working in Continuous Delivery since 2008

▸ Automating pipelines @ FIS

I’ll be your guide on this journey

THE MAP Short introduction to Jenkins

Birth of a pipeline

Manual mode The Job DSL

Branching and its consequences

Pipeline as code

Pipeline as not code

Automation of automation

We want to get thereLook, there is another beach here!

Do not go there!💀

There are traps here!💀

DO YOU KNOW WHO THIS IS?

JENKINS

▸ http://jenkins-ci.org/

▸ Very versatile Continuous Integration engine

▸ ~ 70% of the CI market (2012 figures)

▸ Open source - strong community

▸ Extensible

▸ more than 1000 plugins

▸ easy to develop new ones

▸ Integrates with basically everything

▸ Job scheduler

JENKINS - JOBS & FOLDERS

JENKINS - JOB CONFIGURATIONLet’s get some sources…

Let’s run some build…

Let’s trigger another job…

PIPELINES

▸ Defining jobs

▸ Linking them together

▸ Running them in parallel or in sequence

▸ Some triggers are automatic, other ones are manual

BUILD

DEPLOY ENV 1

DEPLOY ENV 2

DEPLOY ENV 3

PUBLICATION RELEASE

A PIPELINE IS BORN

BUILD

DEPLOY ENV 1

DEPLOY ENV 2

DEPLOY ENV 3

PUBLICATION RELEASE

BUILD

DEPLOY ENV 1

DEPLOY ENV 2

DEPLOY ENV 3

PUBLICATION RELEASE

BUILD

DEPLOY ENV 1

DEPLOY ENV 2

DEPLOY ENV 3

PUBLICATION RELEASE

Commit 1

Commit 2

Commit 3

SO FAR SO GOOD

“Look Ma, I’ve built a pipeline!”

“Lovely. Now, build one for your sister.”

THE STORY

Product A

Product B

Project C

Maintenance 11.8

Maintenance 11.9

Maintenance 11.10

Maintenance 7.2

Maintenance 8.0

Maintenance 5.0

Check

Publication

WAS JBoss …

Promotion for QA

QAWAS QAJBoss …

Promotion for NFT

Sonar Fortify Perf

Promotion for delivery

Delivery

Auto Manual

Pipeline

Products & Projects Branches

THE STORY

Jenkins team

> 5000 jobs and growing…

In order to scale, we want:

✔ Self service

✔ Security

✔ Simplicity

✔ Extensibility

“What are we?”

“Developers!”

“What do we do?”

“Code!”

“Why do we do it?”

“Automation!”

JOB DSL PLUGIN - START OF THE JOURNEY OUT OF THE JUNGLE

▸ Define a job using a Groovy based DSL!

JOB DSL PLUGIN

▸ Very well supported

▸ Very good documentation

▸ Supports most of the plugins

▸ Built-in extensibility: inline or DSL extensions

JOB DSL PLUGIN

▸ Folders & views

▸ … automatic triggers upon generation

▸ … using files in workspace

JOB DSL PLUG-IN

▸ This remains code…

JOB DSL PLUGIN - SEED JOB

▸ DSL based generation done from a job

▸ Can generate and/or update other jobs

▸ Can even run while jobs are running :)

SEED JOB GENERATED JOB(S)

DSL SCRIPT

Generates

Accesses (SCM or inline)GENERATED JOB(S)

GENERATED JOB(S)

PIPELINE EVOLUTION

▸ One Seed DSL job is all very good but…

▸ Pipeline evolves with the code

Buildsthis code

Buildsthis codeWill fa

il for th

is code

New platform beingadded

Job for thenew platform

BRANCHING

▸ One Seed DSL job is all very good but…

▸ Different pipelines for different branches

develop

release/2.0

Pipelines for releasesmight be more complex

Release job

PIPELINE VERSIONS

▸ Where do we put the DSL script?

develop

release/2.0

Pipelines for releasesmight be more complex

DSL.GROOVY

DSL.GROOVY

DSL.GROOVY

PIPELINE AS CODE

▸ Your pipeline is linked to the code it builds

▸ Define your pipeline in your code

Project

src

pom.xml

job-dsl-script.groovy

PIPELINE CODE DUPLICATION

▸ We can now generate a pipeline for any branch, any commit

▸ It evolves with your branches and is merged like any other piece of code

▸ That’s good enough for 1 project

▸ With several (many) projects, the level of DSL code duplication explodes!

DEVELOP FEATURE/BIG RELEASE/1.0

DSL SCRIPT DSL SCRIPT DSL SCRIPT

DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT

DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT

DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT

DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT

PIPELINE CODE DUPLICATION

▸ Job DSL code duplication has the same issues than production code duplication

DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT

DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT

DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT

DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT

✘ ✘ ✘ ✘ ✘ ✘

✘✘✘✘✘✘

DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT

DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT

✘✘✘✘✘✘

DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT

DEVELOP FEATURE/BIG RELEASE/1.0 DSL SCRIPT DSL SCRIPT DSL SCRIPT

✘✘✘✘✘✘

DEVELOP DSL SCRIPT

DEVELOP DSL SCRIPT

✘ ✘

✘✘

DEVELOP DSL SCRIPT

✘✘

DEVELOP DSL SCRIPT

✘✘

RELEASE/1.0 DSL SCRIPT

RELEASE/1.0 DSL SCRIPT

RELEASE/1.0 DSL SCRIPT

RELEASE/1.0 DSL SCRIPT

DEVELOP FEATURE/BIG RELEASE/1.0 DEVELOP FEATURE/BIG RELEASE/1.0

✘✘✘✘✘✘DEVELOP

✘✘RELEASE/1.0

PIPELINE LIBRARIES TO THE RESCUE

▸ Pipeline is code

▸ Reuse of code through versioned libraries

DEVELOP FEATURE/BIG RELEASE/1.0

DSL SCRIPT DSL SCRIPT DSL SCRIPT

PIPELINE DSL LIBRARY

1.1 1.0

Normal project Can be tested Can be released

PIPELINE DSL LIBRARY B

PIPELINE LIBRARIES TO THE RESCUE

▸ DSL libraries as code libraries

DEVELOP FEATURE/BIG DEVELOP

DSL SCRIPT DSL SCRIPT DSL SCRIPT

PIPELINE DSL LIBRARY A

1.1 1.0

COMMON DSL LIBRARY

1.0Dependencies

2.0

ARE WE DONE?

▸ We can describe a pipeline using a DSL

▸ The pipeline is defined together with the code it builds

▸ The DSL can use libraries to reduce code duplication

?

NOT QUITE…

▸ This is not enough to really scale

▸ We still have to write some DSL

▸ Self service ✔

▸ Security ✘

▸ Simplicity ✘

▸ Extensibility ✔

PIPELINE AS “NOT CODE”

▸ Let’s describe the pipeline using a properties file

▸ Which pipeline library & which version

▸ Configuration properties - specific to the library

▸ Property file format ubiquitous

▸ No code running on the master

▸ Can be used for reporting on all the pipelines!

PIPELINE AS PROPERTIES

seed.properties

PIPELINE AS… PROPERTIES

SEED JOB

SCM Repository

Jobs

Gets theseed.properties

Gets the pipelinelibrary version

Configures and runsthe pipeline library

PIPELINE AS… PROPERTIES

SEED JOB

PIPELINE AS… METADATA

▸ The seed.properties files provide a wonderful way to do reporting on all projects and branches

DEVELOP FEATURE/BIG RELEASE/1.0 SEED SEED SEED

DEVELOP FEATURE/NEW RELEASE/3.4 SEED SEED SEED

seed.properties seed.properties

“Give me all branches using JDK 6”“Give me all projects having no SonarQube scan”“…”

SEED PLUGIN

▸ https://github.com/jenkinsci/seed-plugin

▸ Allows to generate:

▸ projects folders

▸ branches pipelines

▸ based on seed files (properties and/or DSL)

▸ integration with hooks

SEVERAL INTEGRATION MODES

SEED.PROPERTIES

SEED PLUGIN

SEED.PROPERTIES

SEED.GROOVYSEED.GROOVY

PIPELINE LIBRARY PIPELINE LIBRARY

BRANCH PIPELINE

95% 4%

1%

GENERATION STRUCTURE

SEED

PROJECT GENERATOR

PROJECT FOLDER

BOOTSTRAPPING

BRANCH GENERATOR

BRANCH FOLDER

BRANCH JOB 1

BRANCH JOB 2

BRANCH JOB 3

BRANCH JOB 4

GENERATION

Project teamJenkins team

PIPELINE SECURITY

SEED

A FOLDER A GENERATOR

BOOTSTRAPPING

A team

Jenkins team

B team

GENERATION

A BRANCHES A PIPELINES

B FOLDER B GENERATOR

B BRANCHES B PIPELINES

GENERATION - HOW IT LOOKS LIKE

BOOTSTRAPPING

GENERATION

GENERATION

AUTOMATION

HOOKS

▸ Generations can be automated using hooks at SCM level

▸ Support for GitHub, BitBucket, generic HTTP calls (for SVN)

▸ Configurable. For example:

BRANCH CREATION

SCM EVENT

Seed plug-in

COMMIT

SEED CHANGED

BRANCH DELETION

PIPELINE EVENT

Generation

Triggers the pipeline

Regenerates the pipeline

Deletes the pipeline

RESPONSIBILITIESJenkins team

Pipeline libraries

Develops and maintains

Development team

Seed files

DefinesSeed plug-in

SCM

Triggers

WHAT DID WE JUST ACHIEVE?▸ Automation of automation

▸ Self service ✔

▸ Pipeline automation from SCM

▸ Security ✔

▸ Project level authorisations

▸ No code on the master

▸ Simplicity ✔

▸ Property files

▸ Extensibility ✔

▸ Pipeline libraries

▸ Direct job DSL still possible

OUT OF THE JUNGLE…

SEED & PIPELINE PLUGIN

▸ The Seed plugin will keep working

▸ It can already generate pipeline jobs (Job DSL)

▸ But overlap of functionalities

Branch pipelines

Pipeline as code

SEED

PIPELINE

Hook integration

Pipeline as properties

Community & support

Pipeline libraries

Pipeline script library

SEED IN PIPELINE PLUGIN

▸ The Seed plugin as extension of the Pipeline plugin

Branch pipelines

Pipeline as code

SEED

PIPELINE

Hook integrationPipeline as properties

Community & supportPipeline libraries

Pipeline script library

THANKS YOU!

Thanks to: Contact:

▸ http://nemerosa.com

▸ @DamienCoraboeuf