Configuration As Code: The Job DSL Plugin

26
Jenkins User Conference Europe #jenkinsconf Configuration As Code The Job DSL Plugin Daniel Spilker CoreMedia www.coremedia.com June 25, 2014 #jenkinsconf

description

An introduction the Job DSL plugin for the Jenkins continuous integration server. Learn how to treat job and view configuration as code, how to store the configuration in SCM and how to apply code reuse and refactoring. Learn how to extend the Job DSL for your favorite plugins.

Transcript of Configuration As Code: The Job DSL Plugin

Page 1: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Configuration As CodeThe Job DSL Plugin

Daniel SpilkerCoreMediawww.coremedia.com

June 25, 2014

#jenkinsconf

Page 2: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Current Situation

• No single job that builds everything• Each branch needs its own pipeline• Every team has their own jobs

Page 3: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Problem

• Lots of copy&paste• Editing in HTML text areas• Settings hidden behind Advanced button• Working with the UI can be slow

Page 4: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Configuration As Code

• Create new pipelines quickly• Refactor jobs• Trace changes• Work with your favorite tool set

Page 5: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

There Is A Plugin For That

• Template Project Plugin• Job Generator Plugin• Literate Plugin• JobConfigHistory Plugin• …

• Job DSL PluginOpen Icon Library / CC BY 3.0

Page 6: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Job DSL Language

job { name('job-dsl-plugin-folders') scm { github('daspilker/job-dsl-plugin', 'folders') } triggers { githubPush() } steps { gradle('clean build') } publishers { archiveArtifacts('**/job-dsl.hpi') }}

Page 7: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Job DSL Language

job { name('job-dsl-plugin-folders') scm { github('daspilker/job-dsl-plugin', 'folders') } triggers { githubPush() } steps { gradle('clean build') } publishers { archiveArtifacts('**/job-dsl.hpi') }}

Page 8: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Job DSL Language

job { name('job-dsl-plugin-folders') scm { github('daspilker/job-dsl-plugin', 'folders') } triggers { githubPush() } steps { gradle('clean build') } publishers { archiveArtifacts('**/job-dsl.hpi') }}

Page 9: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Job DSL Language

job { name('job-dsl-plugin-folders') scm { github('daspilker/job-dsl-plugin', 'folders') } triggers { githubPush() } steps { gradle('clean build') } publishers { archiveArtifacts('**/job-dsl.hpi') }}

Page 10: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Job DSL Language

job { name('job-dsl-plugin-folders') scm { github('daspilker/job-dsl-plugin', 'folders') } triggers { githubPush() } steps { gradle('clean build') } publishers { archiveArtifacts('**/job-dsl.hpi') }}

Page 11: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Job DSL Language

job { name('job-dsl-plugin-folders') scm { github('daspilker/job-dsl-plugin', 'folders') } triggers { githubPush() } steps { gradle('clean build') } publishers { archiveArtifacts('**/job-dsl.hpi') }}

Page 12: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Job DSL Plugin

• Install Job DSL Plugin• Create free-style project• Add “Source Code Management”• Add “Process Job DSL” build step• Configure scripts• Run job

Page 13: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Job DSL Plugin

• Install Job DSL Plugin• Create free-style project• Add “Source Code Management”• Add “Process Job DSL” build step• Configure scripts• Run job

Page 14: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Job DSL Plugin

• Install Job DSL Plugin• Create free-style project• Add “Source Code Management”• Add “Process Job DSL” build step• Configure scripts• Run job

Page 15: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Job DSL Plugin

• Install Job DSL Plugin• Create free-style project• Add “Source Code Management”• Add “Process Job DSL” build step• Configure scripts• Run job

Page 16: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Job DSL Plugin

• Install Job DSL Plugin• Create free-style project• Add “Source Code Management”• Add “Process Job DSL” build step• Configure scripts• Run job

Page 17: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Job DSL Plugin

• Install Job DSL Plugin• Create free-style project• Add “Source Code Management”• Add “Process Job DSL” build step• Configure scripts• Run job

Page 18: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Job DSL Plugin

• Install Job DSL Plugin• Create free-style project• Add “Source Code Management”• Add “Process Job DSL” build step• Configure scripts• Run job

Page 19: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Batteries Included

EnvInject

Groovy

Copy Artifact

Git Subversion

Folders

Extra Columns

StashNotifier

Maven Deployment Linker

Gradle

Build Pipeline

Workspace Cleanup

GitHub Pull Request Builder

GitHub

Multiple SCMs

JaCoCoRelease

Build FlowRobot Framework

Tool Environment

Conditional BuildStep

Throttle Concurrent Builds

Associated Files

JSHint Checkstyle

Emma

Xvnc

Prerequisite Build Step

AnsiColor

Timestamper

Text-FinderJob DSL Perforce

Ant

Maven Project

Page 20: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Extending The DSL

Page 21: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Extending The DSL

Page 22: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Extending The DSL

job { ... configure { project -> project / buildWrappers << EnvInjectPasswordWrapper { injectGlobalPasswords(true) } }}

Page 23: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Everything is Groovy

@Grab(…)…gitHub.user('daspilker').repos.each { repo -> repo.branches.each { branch -> job { name("${repo.name}-${branch.name}") scm { github(repo.name, branch.name) } … } }}

Page 24: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Further Information

• Documentationhttps://github.com/jenkinsci/job-dsl-plugin/wiki

• Exampleshttps://github.com/sheehan/job-dsl-gradle-example

• Playgroundhttp://job-dsl.herokuapp.com/

• Mailing Listhttps://groups.google.com/forum/?fromgroups#!forum/job-dsl-plugin

Page 25: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

CorporateCommunity

Thank You To Our SponsorsPlatinum Gold

Silver

Page 26: Configuration As Code: The Job DSL Plugin

Jenkins User Conference Europe #jenkinsconf

Thank You

Daniel [email protected] @daspilker

We‘re hiring www.coremedia.com @CoreMediaMinds