Slide 1

Slide 1 text

Managing Jenkins With Gradle Gary Hale Gradle Summit 2014

Slide 2

Slide 2 text

Who is this guy? 15+ years in DevOps Gradle Weenie Compulsive Automator

Slide 3

Slide 3 text

What you should do Ask questions! Interrupt / Interact Complete the Evaluation

Slide 4

Slide 4 text

What We’ll Talk About Evolution Jenkins Plugin Basics Demonstrations

Slide 5

Slide 5 text

Extensible Open Source Active Ecosystem Why is Jenkins Awesome? Jenkins Open Source Distributed Model Distributed Model Extensible

Slide 6

Slide 6 text

Why is Jenkins Not Awesome? When we get beyond a handful of Jobs, it becomes tedious to maintain

Slide 7

Slide 7 text

Couple Configuration with Project Track Changes Motivations Discipline Track Changes Couple Configuration with Project Perform Validations/Comparison

Slide 8

Slide 8 text

Leverage Existing Skillset DRY Delegate Minimize Overhead Rebuild from Scratch Delegate Motivations Maintenance Minimize Overhead DRY Rebuild from Scratch Leverage Existing Skillset Enforce Standards

Slide 9

Slide 9 text

Evolution of Jenkins Management Manual Solutions Manual Edits Copy From Existing Script Solutions Script Console System Groovy Script Scriptler Job-like Solutions Jenkins Template Plugin Jenkins Job DSL Plugin External Solutions Jenkins Job Builder Gradle Jenkins Plugin Growth / Complexity

Slide 10

Slide 10 text

Manual Solutions “Nothing is as simple as we hope it will be.” Jim Horning

Slide 11

Slide 11 text

Limited Parameters Groovy Jenkins Model Extremely Powerful Script Solutions Limited Parameters Jenkins Model Extremely Powerful Groovy Better for One-offs

Slide 12

Slide 12 text

Many-to-one Template Jobs Job-like Solutions Template Jobs Job Template Plugin Many-to-one Best When Combined

Slide 13

Slide 13 text

Storable No Validation Template Jobs Powerful DSL Job-like Solutions Powerful DSL Job DSL Plugin Storable Template Jobs No Validation One instance

Slide 14

Slide 14 text

Openstack Clean Configuration Python/Yaml External Solutions Python/Yaml Jenkins Job Builder Openstack Purely Declarative Clean Configuration

Slide 15

Slide 15 text

XML Manipulation Template Jobs Jenkins Job DSL Programmatic External Solutions Programmatic Gradle Jenkins Plugin XML Manipulation Jenkins Job DSL Template Jobs Create/Delete/Validate

Slide 16

Slide 16 text

Does it make sense to manage jenkins with a build automation tool? Question (Think About It…)

Slide 17

Slide 17 text

Gradle Jenkins Plugin Concepts Gradle (static model) Templates Views Jobs Jenkins (live model) Views Jobs Updates

Slide 18

Slide 18 text

deleteJenkinsItems dumpJenkinsItems validateJenkinsItems updateJenkinsItems Gradle Jenkins Plugin updateJenkinsItems Tasks deleteJenkinsItems validateJenkinsItems dumpJenkinsItems dumpRemoteJenkinsItems

Slide 19

Slide 19 text

Gradle Jenkins Plugin jenkins { servers { … } templates { … } jobs { … } views { … } } Conventions

Slide 20

Slide 20 text

Servers servers { server1 { url ‘http://jenkins.somewhere.com’ username ‘user1’ password ‘password1’ } } Secured

Slide 21

Slide 21 text

Servers servers { server1 { url ‘http://jenkins.somewhere.com’ secure false } } Unsecured

Slide 22

Slide 22 text

Templates templates { template1 { xml file(‘template.xml’) } } XML

Slide 23

Slide 23 text

Templates templates { template1 { dsl file(‘template.dsl’) } } DSL

Slide 24

Slide 24 text

Jobs jobs { build_job1 { server servers.server1 definition { xml file(‘build_job1.xml’) } } } XML

Slide 25

Slide 25 text

Jobs jobs { build_job1 { server servers.server1 dsl { using ‘template1’ } } } DSL

Slide 26

Slide 26 text

Views views { view1 { xml file(‘view1.xml’) } } XML

Slide 27

Slide 27 text

Views views { view1 { dsl { … } } } DSL

Slide 28

Slide 28 text

Multiple DSL Form jenkins { defaultServer servers.server1 dsl fileTree(‘jenkins’).include(‘*.dsl’) dsl { … } }

Slide 29

Slide 29 text

Demonstrations

Slide 30

Slide 30 text

Does it make sense to manage jenkins with a build automation tool? Question

Slide 31

Slide 31 text

Is Gradle a Build Automation Tool? The Right Question

Slide 32

Slide 32 text

Is a Swiss army knife a knife?

Slide 33

Slide 33 text

References https://github.com/ghale/gradle-jenkins-plugin https://github.com/ghale/summit2014