SlideShare a Scribd company logo
1
CICD Pipeline configuration as a
Code
(a.k.a. JobConfig)
by Anatolii Kaliuzhnyi
2
Who am I?
3
Agenda:
1. Business case and Prerequisites
2. JobConfig and ConfigProcessor
3. Close to real case
4. Troubles and issues
5. Conclusion
6. Q&A
4
Business Case
5
1. Security limitations
Business Case
2. Multiple release support
3. Different teams
4. Comfort
6
Prerequisites
7
1.
What do we need
2.
3.
4.
8
JobDSL is a dsl wrapper for job creation in Jenkins.
Sample job:
What JobDSL is
job('build') {
description 'Build and test the app.'
scm {
github 'TestOrg/JavaTest'
}
steps {
maven 'test'
}
}
9
What JobDSL is
10
JobDSL allows you to insert any Groovy code inside it, so you can such tricks:
JobDSL power
job('build') {
description 'Build and test the app.'
scm {
github 'TestOrg/JavaTest'
}
steps {
def mavenSteps = ['test', 'deploy', 'clean']
mavenSteps.each{
maven it
}
}
}
11
JobDSL power
12
1. Using JobDSL you can create base classes for each type of Jenkins job you have.
2. Upload them to git and use it inside a seed job(job that executes JobDSL)
3. This is much better than go and click out some jobs in UI in Jenkins (which sucks)
4. With JobDSL you can make a change in a file, push to git and run seed.
Base Class
BaseClass file GIT
Push
Seed Job
Checkout
Jobs
13
class MavenBuild {
static job (name) {
job(name) {
description 'Build and test the app.'
scm {
github 'TestOrg/JavaTest'
}
steps {
def mavenSteps = ['test', 'deploy', 'clean']
mavenSteps.each{
maven it
}
}
}
}
}
Base Class
Wrap the JobDSL with a class:
14
JobConfig and ConfigProcessor
15
What do we need from such a DSL:
1. We need to have each sub closure as a job (with name as job’s name)
2. Import from external files (preferably with overrides)
3. Reusable blocks, in case we have several alike jobs in a single file
4. All filewise variables (which will be included into each job)
5. Jobs should have a link to its Base Class and folder, where it should be located
DSL above JobDSL
16
1. Use existing some format (json, yaml, etc)
Format
2. Invent bicycle own format
3. Use same approach as for JobDSL
17
JobConfig
18
Example of a JobConfig
imports = ["default.cfg", "build.cfg"]
common {
github {
org = "SomeOrg"
repo = "JavaTest"
}
}
__build {
imports = ["maven.cfg"]
maven {
steps = "deploy"
}
}
Build {
imports = ["__build"]
}
19
● Filewise variables section
● Included into each job
● Could be overridden by specific parameters in Job’s section
Common section
common
job
common
job
job params
20
● “imports” keyword
● Receives a list of filenames or “__” starting sections to include as a part of the jc itself (also a closure)
● First file of the list is first imported (params could be overridden by next file or section)
Importing
filename
job
section
imports
sections or
files
job
import
order
21
● All sub closures, which start with “__” is being considered as a custom section
● It can be imported with “imports” inside this JobConfig
● This can come in handy, when you have several jobs with similar configuration
Custom Sections
generic section
jobs
22
● Each job will have its own JC
● JC will be a compile of all included blocks and files
● Can be addressed from inside the Base Class, so that you can create more or less generic classes, with
necessary flexibility
Jobs
common
section(s)
file(s)
JobConfig for a job
23
● Use ConfigSlurper to parse the file
● Find all keywords and apply appropriate rules for them
● Generate JCs for each job, include all imports(if needed) and include common section
powered by
Config Processor
24
def processJCFile(fileName) {
def configProcessor = new ConfigProcessor(dslFactory)
def allJCs = configProcessor.processConfig(fileName)
allJCs.each { jc ->
configProcessor.printJC(jc)
def jobClass = Class.forName("${jc.'jobClass.baseClassName'}")?.newInstance()
jobClass.job(context, jc)
}
return allJCs
}
Seed Executor
25
Seed Job Example
26
What could be improved:
● OOP principles applied
● Libraries and collections
● Non-flat structure of the framework
● Helpers
● Fancy stuff (e.g. package into a jar, start using releases and hotfixes)
2 files framework
27
Let’s make a JC for the pipeline:
● Create a base class for pipeline
● Add the map of pipeline steps
● Add all params to paa them into
next step
Create a workflow file:
● Handle the map of steps in the
pipeline itself
● Ensure to pass all params to the
next step
Pipelines
JC:
Pipeline {
imports = ["__pipeline"]
jobClass {
baseClassName = "Pipeline"
classPath = ""
}
job {
pipeline = [ Build: [
BRANCH_NAME:"master"
]
]
}
}
Workflow(jenkins)file
for (kv in mapToList(JC.job.pipeline)) {
def pipeJob = kv[0]
def pipelineParameters = []
for (paramskv in mapToList(kv[1])) {
pipelineParameters.add([$class:
'StringParameterValue', name: paramskv[0], value:
paramskv[1]])
}
build job: JC.allJobs."${pipeJob}", parameters:
pipelineParameters
}
28
Troubles and issues
29
Complexity of real case
● Arrange files by their purposes and handle those locations
● Split the JCs and framework into separate repos or at least
folders
● Create libraries and collections, to reuse them in Base Classes
or elsewhere
● Create docs (or keep everything in mind)
30
● To debug something, you need to start the seed process, so you need to push the code to the repo and
use some non-master branch, which could take time
● Stack trace is so long for seed jobs and it is not very clear where did it fail
● Non-comprehensive errors appear during the seed process, if something fails
PITA of debug
31
● It will take some time to have ambiguous number of base classes for all cases in you work (yet you will
come across situations, when you need to create new class)
● Maintaining the framework and infrastructural changes in it (e.g. adding storage to store JCs to use in
inside pipelines)
● Engineers need time to start using it as a pro
Time Consuming Development
32
Why and in what cases do you need such solution?
33
1. Laziness (obviously)
Why do we need it?
5. Agility
2. Trackability
3. Simplification of configuration
4. Transparency
34
1. Personal framework to start automation
2. Application is a microservice hell
3. ~10 application to build out
4. Because you want to
In what cases do we need it?
35
1. Only one application
When we don’t need it
2. Support hasn’t been calculated
3. Small amount of jobs in Jenkins
36
Pros and Cons
Pros:
● Super fast creation of jobs from scratch
● Version control
● Fixing issues with several jobs is simpler
● Adding generic functionality to existing jobs
will be much easier
Cons:
● Will take a while, before you get all classes
created
● Debug is horrible
● Changing a single job will take you more time,
than just changing it in UI instead
● Will work only, if you have big number of jobs
to maintain
37
Q&A
38
Thank you

More Related Content

What's hot

NetBeans Support for EcmaScript 6
NetBeans Support for EcmaScript 6NetBeans Support for EcmaScript 6
NetBeans Support for EcmaScript 6
Kostas Saidis
 
Gradle
GradleGradle
Gradle : An introduction
Gradle : An introduction Gradle : An introduction
Gradle : An introduction
Nibodha Technologies
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
Dmitry Buzdin
 
Gradle - time for a new build
Gradle - time for a new buildGradle - time for a new build
Gradle - time for a new build
Igor Khotin
 
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie..."How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
Fwdays
 
Managing dependencies with gradle
Managing dependencies with gradleManaging dependencies with gradle
Managing dependencies with gradle
Liviu Tudor
 
CodeWay 2019 - Gandalf: Bad code shall not pass
CodeWay 2019 - Gandalf: Bad code shall not passCodeWay 2019 - Gandalf: Bad code shall not pass
CodeWay 2019 - Gandalf: Bad code shall not pass
Ilya Ghirici
 
Building a deployment pipeline
Building a deployment pipelineBuilding a deployment pipeline
Building a deployment pipeline
Noam Shochat
 
Functional and scale performance tests using zopkio
Functional and scale performance tests using zopkio Functional and scale performance tests using zopkio
Functional and scale performance tests using zopkio
Marcelo Araujo
 
Basic Gradle Plugin Writing
Basic Gradle Plugin WritingBasic Gradle Plugin Writing
Basic Gradle Plugin Writing
Schalk Cronjé
 
Puppet Camp Berlin 2015: Andrea Giardini | Configuration Management @ CERN: G...
Puppet Camp Berlin 2015: Andrea Giardini | Configuration Management @ CERN: G...Puppet Camp Berlin 2015: Andrea Giardini | Configuration Management @ CERN: G...
Puppet Camp Berlin 2015: Andrea Giardini | Configuration Management @ CERN: G...
NETWAYS
 
Gradle presentation
Gradle presentationGradle presentation
Gradle presentation
Oriol Jiménez
 
Drupalhagen 2014 kiss omg ftw
Drupalhagen 2014   kiss omg ftwDrupalhagen 2014   kiss omg ftw
Drupalhagen 2014 kiss omg ftw
Arne Jørgensen
 
Gradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionGradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 version
Schalk Cronjé
 
DevTools Package Development
 DevTools Package Development DevTools Package Development
DevTools Package Development
Sagar Deogirkar
 
JavaFX8 TestFX - CDI
JavaFX8   TestFX - CDIJavaFX8   TestFX - CDI
JavaFX8 TestFX - CDI
Sven Ruppert
 
Gradle: The Build System you have been waiting for!
Gradle: The Build System you have been waiting for!Gradle: The Build System you have been waiting for!
Gradle: The Build System you have been waiting for!
Corneil du Plessis
 
Using the Groovy Ecosystem for Rapid JVM Development
Using the Groovy Ecosystem for Rapid JVM DevelopmentUsing the Groovy Ecosystem for Rapid JVM Development
Using the Groovy Ecosystem for Rapid JVM Development
Schalk Cronjé
 
Structured Testing Framework
Structured Testing FrameworkStructured Testing Framework
Structured Testing Framework
serzar
 

What's hot (20)

NetBeans Support for EcmaScript 6
NetBeans Support for EcmaScript 6NetBeans Support for EcmaScript 6
NetBeans Support for EcmaScript 6
 
Gradle
GradleGradle
Gradle
 
Gradle : An introduction
Gradle : An introduction Gradle : An introduction
Gradle : An introduction
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
Gradle - time for a new build
Gradle - time for a new buildGradle - time for a new build
Gradle - time for a new build
 
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie..."How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
"How to Use Bazel to Manage Monorepos: The Grammarly Front-End Team’s Experie...
 
Managing dependencies with gradle
Managing dependencies with gradleManaging dependencies with gradle
Managing dependencies with gradle
 
CodeWay 2019 - Gandalf: Bad code shall not pass
CodeWay 2019 - Gandalf: Bad code shall not passCodeWay 2019 - Gandalf: Bad code shall not pass
CodeWay 2019 - Gandalf: Bad code shall not pass
 
Building a deployment pipeline
Building a deployment pipelineBuilding a deployment pipeline
Building a deployment pipeline
 
Functional and scale performance tests using zopkio
Functional and scale performance tests using zopkio Functional and scale performance tests using zopkio
Functional and scale performance tests using zopkio
 
Basic Gradle Plugin Writing
Basic Gradle Plugin WritingBasic Gradle Plugin Writing
Basic Gradle Plugin Writing
 
Puppet Camp Berlin 2015: Andrea Giardini | Configuration Management @ CERN: G...
Puppet Camp Berlin 2015: Andrea Giardini | Configuration Management @ CERN: G...Puppet Camp Berlin 2015: Andrea Giardini | Configuration Management @ CERN: G...
Puppet Camp Berlin 2015: Andrea Giardini | Configuration Management @ CERN: G...
 
Gradle presentation
Gradle presentationGradle presentation
Gradle presentation
 
Drupalhagen 2014 kiss omg ftw
Drupalhagen 2014   kiss omg ftwDrupalhagen 2014   kiss omg ftw
Drupalhagen 2014 kiss omg ftw
 
Gradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionGradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 version
 
DevTools Package Development
 DevTools Package Development DevTools Package Development
DevTools Package Development
 
JavaFX8 TestFX - CDI
JavaFX8   TestFX - CDIJavaFX8   TestFX - CDI
JavaFX8 TestFX - CDI
 
Gradle: The Build System you have been waiting for!
Gradle: The Build System you have been waiting for!Gradle: The Build System you have been waiting for!
Gradle: The Build System you have been waiting for!
 
Using the Groovy Ecosystem for Rapid JVM Development
Using the Groovy Ecosystem for Rapid JVM DevelopmentUsing the Groovy Ecosystem for Rapid JVM Development
Using the Groovy Ecosystem for Rapid JVM Development
 
Structured Testing Framework
Structured Testing FrameworkStructured Testing Framework
Structured Testing Framework
 

Similar to CICD Pipeline configuration as a code

Js tacktalk team dev js testing performance
Js tacktalk team dev js testing performanceJs tacktalk team dev js testing performance
Js tacktalk team dev js testing performance
Артем Захарченко
 
PostgreSQL and PL/Java
PostgreSQL and PL/JavaPostgreSQL and PL/Java
PostgreSQL and PL/Java
Peter Eisentraut
 
Oleksii Moskalenko "Continuous Delivery of ML Pipelines to Production"
Oleksii Moskalenko "Continuous Delivery of ML Pipelines to Production"Oleksii Moskalenko "Continuous Delivery of ML Pipelines to Production"
Oleksii Moskalenko "Continuous Delivery of ML Pipelines to Production"
Fwdays
 
Continuos Integration @Knetminer
Continuos Integration @KnetminerContinuos Integration @Knetminer
Continuos Integration @Knetminer
Rothamsted Research, UK
 
Learn jobDSL for Jenkins
Learn jobDSL for JenkinsLearn jobDSL for Jenkins
Learn jobDSL for Jenkins
Larry Cai
 
Advanced Node.JS Meetup
Advanced Node.JS MeetupAdvanced Node.JS Meetup
Advanced Node.JS Meetup
LINAGORA
 
OpenCms Days 2015 Workflow using Docker and Jenkins
OpenCms Days 2015 Workflow using Docker and JenkinsOpenCms Days 2015 Workflow using Docker and Jenkins
OpenCms Days 2015 Workflow using Docker and Jenkins
Alkacon Software GmbH & Co. KG
 
Testing Spring Applications
Testing Spring ApplicationsTesting Spring Applications
Testing Spring Applications
Muhammad Abdullah
 
Bots on guard of sdlc
Bots on guard of sdlcBots on guard of sdlc
Bots on guard of sdlc
Alexey Tokar
 
3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API
Gavin Pickin
 
3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API - 3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API -
Ortus Solutions, Corp
 
Gradle - From minutes to seconds: minimizing build times
Gradle - From minutes to seconds: minimizing build timesGradle - From minutes to seconds: minimizing build times
Gradle - From minutes to seconds: minimizing build times
Rene Gröschke
 
Apache DeltaSpike the CDI toolbox
Apache DeltaSpike the CDI toolboxApache DeltaSpike the CDI toolbox
Apache DeltaSpike the CDI toolbox
Antoine Sabot-Durand
 
Apache DeltaSpike: The CDI Toolbox
Apache DeltaSpike: The CDI ToolboxApache DeltaSpike: The CDI Toolbox
Apache DeltaSpike: The CDI Toolbox
Virtual JBoss User Group
 
YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»
YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»
YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»
QADay
 
The Basic Concept Of IOC
The Basic Concept Of IOCThe Basic Concept Of IOC
The Basic Concept Of IOC
Carl Lu
 
Performant Django - Ara Anjargolian
Performant Django - Ara AnjargolianPerformant Django - Ara Anjargolian
Performant Django - Ara Anjargolian
Hakka Labs
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
Ivan Krylov
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
Fabio Fumarola
 
Java 9
Java 9Java 9

Similar to CICD Pipeline configuration as a code (20)

Js tacktalk team dev js testing performance
Js tacktalk team dev js testing performanceJs tacktalk team dev js testing performance
Js tacktalk team dev js testing performance
 
PostgreSQL and PL/Java
PostgreSQL and PL/JavaPostgreSQL and PL/Java
PostgreSQL and PL/Java
 
Oleksii Moskalenko "Continuous Delivery of ML Pipelines to Production"
Oleksii Moskalenko "Continuous Delivery of ML Pipelines to Production"Oleksii Moskalenko "Continuous Delivery of ML Pipelines to Production"
Oleksii Moskalenko "Continuous Delivery of ML Pipelines to Production"
 
Continuos Integration @Knetminer
Continuos Integration @KnetminerContinuos Integration @Knetminer
Continuos Integration @Knetminer
 
Learn jobDSL for Jenkins
Learn jobDSL for JenkinsLearn jobDSL for Jenkins
Learn jobDSL for Jenkins
 
Advanced Node.JS Meetup
Advanced Node.JS MeetupAdvanced Node.JS Meetup
Advanced Node.JS Meetup
 
OpenCms Days 2015 Workflow using Docker and Jenkins
OpenCms Days 2015 Workflow using Docker and JenkinsOpenCms Days 2015 Workflow using Docker and Jenkins
OpenCms Days 2015 Workflow using Docker and Jenkins
 
Testing Spring Applications
Testing Spring ApplicationsTesting Spring Applications
Testing Spring Applications
 
Bots on guard of sdlc
Bots on guard of sdlcBots on guard of sdlc
Bots on guard of sdlc
 
3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API
 
3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API - 3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API -
 
Gradle - From minutes to seconds: minimizing build times
Gradle - From minutes to seconds: minimizing build timesGradle - From minutes to seconds: minimizing build times
Gradle - From minutes to seconds: minimizing build times
 
Apache DeltaSpike the CDI toolbox
Apache DeltaSpike the CDI toolboxApache DeltaSpike the CDI toolbox
Apache DeltaSpike the CDI toolbox
 
Apache DeltaSpike: The CDI Toolbox
Apache DeltaSpike: The CDI ToolboxApache DeltaSpike: The CDI Toolbox
Apache DeltaSpike: The CDI Toolbox
 
YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»
YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»
YEGOR MAKSYMCHUK «Using Kubernetes for organization performance tests»
 
The Basic Concept Of IOC
The Basic Concept Of IOCThe Basic Concept Of IOC
The Basic Concept Of IOC
 
Performant Django - Ara Anjargolian
Performant Django - Ara AnjargolianPerformant Django - Ara Anjargolian
Performant Django - Ara Anjargolian
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
 
Java 9
Java 9Java 9
Java 9
 

More from Grid Dynamics

Are you keeping up with your customer
Are you keeping up with your customer Are you keeping up with your customer
Are you keeping up with your customer
Grid Dynamics
 
"Implementing data quality automation with open source stack" - Max Martynov,...
"Implementing data quality automation with open source stack" - Max Martynov,..."Implementing data quality automation with open source stack" - Max Martynov,...
"Implementing data quality automation with open source stack" - Max Martynov,...
Grid Dynamics
 
"How to build cool & useful voice commerce applications (such as devices like...
"How to build cool & useful voice commerce applications (such as devices like..."How to build cool & useful voice commerce applications (such as devices like...
"How to build cool & useful voice commerce applications (such as devices like...
Grid Dynamics
 
"Challenges for AI in Healthcare" - Peter Graven Ph.D
"Challenges for AI in Healthcare" - Peter Graven Ph.D"Challenges for AI in Healthcare" - Peter Graven Ph.D
"Challenges for AI in Healthcare" - Peter Graven Ph.D
Grid Dynamics
 
Dynamic Talks: "Applications of Big Data, Machine Learning and Artificial Int...
Dynamic Talks: "Applications of Big Data, Machine Learning and Artificial Int...Dynamic Talks: "Applications of Big Data, Machine Learning and Artificial Int...
Dynamic Talks: "Applications of Big Data, Machine Learning and Artificial Int...
Grid Dynamics
 
Dynamic Talks: "Digital Transformation in Banking & Financial Services… a per...
Dynamic Talks: "Digital Transformation in Banking & Financial Services… a per...Dynamic Talks: "Digital Transformation in Banking & Financial Services… a per...
Dynamic Talks: "Digital Transformation in Banking & Financial Services… a per...
Grid Dynamics
 
Dynamic Talks: "Data Strategy as a Conduit for Data Maturity and Monetization...
Dynamic Talks: "Data Strategy as a Conduit for Data Maturity and Monetization...Dynamic Talks: "Data Strategy as a Conduit for Data Maturity and Monetization...
Dynamic Talks: "Data Strategy as a Conduit for Data Maturity and Monetization...
Grid Dynamics
 
Dynamics Talks: "Writing Spark Pipelines with Less Boilerplate Code" - Egor P...
Dynamics Talks: "Writing Spark Pipelines with Less Boilerplate Code" - Egor P...Dynamics Talks: "Writing Spark Pipelines with Less Boilerplate Code" - Egor P...
Dynamics Talks: "Writing Spark Pipelines with Less Boilerplate Code" - Egor P...
Grid Dynamics
 
"Trends in Building Advanced Analytics Platform for Large Enterprises" - Atul...
"Trends in Building Advanced Analytics Platform for Large Enterprises" - Atul..."Trends in Building Advanced Analytics Platform for Large Enterprises" - Atul...
"Trends in Building Advanced Analytics Platform for Large Enterprises" - Atul...
Grid Dynamics
 
The New Era of Public Safety Records Management: Dynamic talks Chicago 9/24/2019
The New Era of Public Safety Records Management: Dynamic talks Chicago 9/24/2019The New Era of Public Safety Records Management: Dynamic talks Chicago 9/24/2019
The New Era of Public Safety Records Management: Dynamic talks Chicago 9/24/2019
Grid Dynamics
 
Dynamic Talks: "Implementing data quality automation with open source stack" ...
Dynamic Talks: "Implementing data quality automation with open source stack" ...Dynamic Talks: "Implementing data quality automation with open source stack" ...
Dynamic Talks: "Implementing data quality automation with open source stack" ...
Grid Dynamics
 
"Implementing AI for New Business Models and Efficiencies" - Parag Shrivastav...
"Implementing AI for New Business Models and Efficiencies" - Parag Shrivastav..."Implementing AI for New Business Models and Efficiencies" - Parag Shrivastav...
"Implementing AI for New Business Models and Efficiencies" - Parag Shrivastav...
Grid Dynamics
 
Reducing No-shows and Late Cancelations in Healthcare Enterprise" - Shervin M...
Reducing No-shows and Late Cancelations in Healthcare Enterprise" - Shervin M...Reducing No-shows and Late Cancelations in Healthcare Enterprise" - Shervin M...
Reducing No-shows and Late Cancelations in Healthcare Enterprise" - Shervin M...
Grid Dynamics
 
Customer intelligence: a Machine Learning Approach: Dynamic talks Atlanta 8/2...
Customer intelligence: a Machine Learning Approach: Dynamic talks Atlanta 8/2...Customer intelligence: a Machine Learning Approach: Dynamic talks Atlanta 8/2...
Customer intelligence: a Machine Learning Approach: Dynamic talks Atlanta 8/2...
Grid Dynamics
 
"ML Services - How do you begin and when do you start scaling?" - Madhura Dud...
"ML Services - How do you begin and when do you start scaling?" - Madhura Dud..."ML Services - How do you begin and when do you start scaling?" - Madhura Dud...
"ML Services - How do you begin and when do you start scaling?" - Madhura Dud...
Grid Dynamics
 
Realtime Contextual Product Recommendations…that scale and generate revenue -...
Realtime Contextual Product Recommendations…that scale and generate revenue -...Realtime Contextual Product Recommendations…that scale and generate revenue -...
Realtime Contextual Product Recommendations…that scale and generate revenue -...
Grid Dynamics
 
Decision Automation in Marketing Systems using Reinforcement Learning: Dynami...
Decision Automation in Marketing Systems using Reinforcement Learning: Dynami...Decision Automation in Marketing Systems using Reinforcement Learning: Dynami...
Decision Automation in Marketing Systems using Reinforcement Learning: Dynami...
Grid Dynamics
 
Best practices for enterprise-grade microservices implementations with Google...
Best practices for enterprise-grade microservices implementations with Google...Best practices for enterprise-grade microservices implementations with Google...
Best practices for enterprise-grade microservices implementations with Google...
Grid Dynamics
 
Attribution Modelling 101: Credit Where Credit is Due!: Dynamic talks Seattle...
Attribution Modelling 101: Credit Where Credit is Due!: Dynamic talks Seattle...Attribution Modelling 101: Credit Where Credit is Due!: Dynamic talks Seattle...
Attribution Modelling 101: Credit Where Credit is Due!: Dynamic talks Seattle...
Grid Dynamics
 
Building an algorithmic price management system using ML: Dynamic talks Seatt...
Building an algorithmic price management system using ML: Dynamic talks Seatt...Building an algorithmic price management system using ML: Dynamic talks Seatt...
Building an algorithmic price management system using ML: Dynamic talks Seatt...
Grid Dynamics
 

More from Grid Dynamics (20)

Are you keeping up with your customer
Are you keeping up with your customer Are you keeping up with your customer
Are you keeping up with your customer
 
"Implementing data quality automation with open source stack" - Max Martynov,...
"Implementing data quality automation with open source stack" - Max Martynov,..."Implementing data quality automation with open source stack" - Max Martynov,...
"Implementing data quality automation with open source stack" - Max Martynov,...
 
"How to build cool & useful voice commerce applications (such as devices like...
"How to build cool & useful voice commerce applications (such as devices like..."How to build cool & useful voice commerce applications (such as devices like...
"How to build cool & useful voice commerce applications (such as devices like...
 
"Challenges for AI in Healthcare" - Peter Graven Ph.D
"Challenges for AI in Healthcare" - Peter Graven Ph.D"Challenges for AI in Healthcare" - Peter Graven Ph.D
"Challenges for AI in Healthcare" - Peter Graven Ph.D
 
Dynamic Talks: "Applications of Big Data, Machine Learning and Artificial Int...
Dynamic Talks: "Applications of Big Data, Machine Learning and Artificial Int...Dynamic Talks: "Applications of Big Data, Machine Learning and Artificial Int...
Dynamic Talks: "Applications of Big Data, Machine Learning and Artificial Int...
 
Dynamic Talks: "Digital Transformation in Banking & Financial Services… a per...
Dynamic Talks: "Digital Transformation in Banking & Financial Services… a per...Dynamic Talks: "Digital Transformation in Banking & Financial Services… a per...
Dynamic Talks: "Digital Transformation in Banking & Financial Services… a per...
 
Dynamic Talks: "Data Strategy as a Conduit for Data Maturity and Monetization...
Dynamic Talks: "Data Strategy as a Conduit for Data Maturity and Monetization...Dynamic Talks: "Data Strategy as a Conduit for Data Maturity and Monetization...
Dynamic Talks: "Data Strategy as a Conduit for Data Maturity and Monetization...
 
Dynamics Talks: "Writing Spark Pipelines with Less Boilerplate Code" - Egor P...
Dynamics Talks: "Writing Spark Pipelines with Less Boilerplate Code" - Egor P...Dynamics Talks: "Writing Spark Pipelines with Less Boilerplate Code" - Egor P...
Dynamics Talks: "Writing Spark Pipelines with Less Boilerplate Code" - Egor P...
 
"Trends in Building Advanced Analytics Platform for Large Enterprises" - Atul...
"Trends in Building Advanced Analytics Platform for Large Enterprises" - Atul..."Trends in Building Advanced Analytics Platform for Large Enterprises" - Atul...
"Trends in Building Advanced Analytics Platform for Large Enterprises" - Atul...
 
The New Era of Public Safety Records Management: Dynamic talks Chicago 9/24/2019
The New Era of Public Safety Records Management: Dynamic talks Chicago 9/24/2019The New Era of Public Safety Records Management: Dynamic talks Chicago 9/24/2019
The New Era of Public Safety Records Management: Dynamic talks Chicago 9/24/2019
 
Dynamic Talks: "Implementing data quality automation with open source stack" ...
Dynamic Talks: "Implementing data quality automation with open source stack" ...Dynamic Talks: "Implementing data quality automation with open source stack" ...
Dynamic Talks: "Implementing data quality automation with open source stack" ...
 
"Implementing AI for New Business Models and Efficiencies" - Parag Shrivastav...
"Implementing AI for New Business Models and Efficiencies" - Parag Shrivastav..."Implementing AI for New Business Models and Efficiencies" - Parag Shrivastav...
"Implementing AI for New Business Models and Efficiencies" - Parag Shrivastav...
 
Reducing No-shows and Late Cancelations in Healthcare Enterprise" - Shervin M...
Reducing No-shows and Late Cancelations in Healthcare Enterprise" - Shervin M...Reducing No-shows and Late Cancelations in Healthcare Enterprise" - Shervin M...
Reducing No-shows and Late Cancelations in Healthcare Enterprise" - Shervin M...
 
Customer intelligence: a Machine Learning Approach: Dynamic talks Atlanta 8/2...
Customer intelligence: a Machine Learning Approach: Dynamic talks Atlanta 8/2...Customer intelligence: a Machine Learning Approach: Dynamic talks Atlanta 8/2...
Customer intelligence: a Machine Learning Approach: Dynamic talks Atlanta 8/2...
 
"ML Services - How do you begin and when do you start scaling?" - Madhura Dud...
"ML Services - How do you begin and when do you start scaling?" - Madhura Dud..."ML Services - How do you begin and when do you start scaling?" - Madhura Dud...
"ML Services - How do you begin and when do you start scaling?" - Madhura Dud...
 
Realtime Contextual Product Recommendations…that scale and generate revenue -...
Realtime Contextual Product Recommendations…that scale and generate revenue -...Realtime Contextual Product Recommendations…that scale and generate revenue -...
Realtime Contextual Product Recommendations…that scale and generate revenue -...
 
Decision Automation in Marketing Systems using Reinforcement Learning: Dynami...
Decision Automation in Marketing Systems using Reinforcement Learning: Dynami...Decision Automation in Marketing Systems using Reinforcement Learning: Dynami...
Decision Automation in Marketing Systems using Reinforcement Learning: Dynami...
 
Best practices for enterprise-grade microservices implementations with Google...
Best practices for enterprise-grade microservices implementations with Google...Best practices for enterprise-grade microservices implementations with Google...
Best practices for enterprise-grade microservices implementations with Google...
 
Attribution Modelling 101: Credit Where Credit is Due!: Dynamic talks Seattle...
Attribution Modelling 101: Credit Where Credit is Due!: Dynamic talks Seattle...Attribution Modelling 101: Credit Where Credit is Due!: Dynamic talks Seattle...
Attribution Modelling 101: Credit Where Credit is Due!: Dynamic talks Seattle...
 
Building an algorithmic price management system using ML: Dynamic talks Seatt...
Building an algorithmic price management system using ML: Dynamic talks Seatt...Building an algorithmic price management system using ML: Dynamic talks Seatt...
Building an algorithmic price management system using ML: Dynamic talks Seatt...
 

Recently uploaded

Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
Zilliz
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 

Recently uploaded (20)

Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 

CICD Pipeline configuration as a code

  • 1. 1 CICD Pipeline configuration as a Code (a.k.a. JobConfig) by Anatolii Kaliuzhnyi
  • 3. 3 Agenda: 1. Business case and Prerequisites 2. JobConfig and ConfigProcessor 3. Close to real case 4. Troubles and issues 5. Conclusion 6. Q&A
  • 5. 5 1. Security limitations Business Case 2. Multiple release support 3. Different teams 4. Comfort
  • 7. 7 1. What do we need 2. 3. 4.
  • 8. 8 JobDSL is a dsl wrapper for job creation in Jenkins. Sample job: What JobDSL is job('build') { description 'Build and test the app.' scm { github 'TestOrg/JavaTest' } steps { maven 'test' } }
  • 10. 10 JobDSL allows you to insert any Groovy code inside it, so you can such tricks: JobDSL power job('build') { description 'Build and test the app.' scm { github 'TestOrg/JavaTest' } steps { def mavenSteps = ['test', 'deploy', 'clean'] mavenSteps.each{ maven it } } }
  • 12. 12 1. Using JobDSL you can create base classes for each type of Jenkins job you have. 2. Upload them to git and use it inside a seed job(job that executes JobDSL) 3. This is much better than go and click out some jobs in UI in Jenkins (which sucks) 4. With JobDSL you can make a change in a file, push to git and run seed. Base Class BaseClass file GIT Push Seed Job Checkout Jobs
  • 13. 13 class MavenBuild { static job (name) { job(name) { description 'Build and test the app.' scm { github 'TestOrg/JavaTest' } steps { def mavenSteps = ['test', 'deploy', 'clean'] mavenSteps.each{ maven it } } } } } Base Class Wrap the JobDSL with a class:
  • 15. 15 What do we need from such a DSL: 1. We need to have each sub closure as a job (with name as job’s name) 2. Import from external files (preferably with overrides) 3. Reusable blocks, in case we have several alike jobs in a single file 4. All filewise variables (which will be included into each job) 5. Jobs should have a link to its Base Class and folder, where it should be located DSL above JobDSL
  • 16. 16 1. Use existing some format (json, yaml, etc) Format 2. Invent bicycle own format 3. Use same approach as for JobDSL
  • 18. 18 Example of a JobConfig imports = ["default.cfg", "build.cfg"] common { github { org = "SomeOrg" repo = "JavaTest" } } __build { imports = ["maven.cfg"] maven { steps = "deploy" } } Build { imports = ["__build"] }
  • 19. 19 ● Filewise variables section ● Included into each job ● Could be overridden by specific parameters in Job’s section Common section common job common job job params
  • 20. 20 ● “imports” keyword ● Receives a list of filenames or “__” starting sections to include as a part of the jc itself (also a closure) ● First file of the list is first imported (params could be overridden by next file or section) Importing filename job section imports sections or files job import order
  • 21. 21 ● All sub closures, which start with “__” is being considered as a custom section ● It can be imported with “imports” inside this JobConfig ● This can come in handy, when you have several jobs with similar configuration Custom Sections generic section jobs
  • 22. 22 ● Each job will have its own JC ● JC will be a compile of all included blocks and files ● Can be addressed from inside the Base Class, so that you can create more or less generic classes, with necessary flexibility Jobs common section(s) file(s) JobConfig for a job
  • 23. 23 ● Use ConfigSlurper to parse the file ● Find all keywords and apply appropriate rules for them ● Generate JCs for each job, include all imports(if needed) and include common section powered by Config Processor
  • 24. 24 def processJCFile(fileName) { def configProcessor = new ConfigProcessor(dslFactory) def allJCs = configProcessor.processConfig(fileName) allJCs.each { jc -> configProcessor.printJC(jc) def jobClass = Class.forName("${jc.'jobClass.baseClassName'}")?.newInstance() jobClass.job(context, jc) } return allJCs } Seed Executor
  • 26. 26 What could be improved: ● OOP principles applied ● Libraries and collections ● Non-flat structure of the framework ● Helpers ● Fancy stuff (e.g. package into a jar, start using releases and hotfixes) 2 files framework
  • 27. 27 Let’s make a JC for the pipeline: ● Create a base class for pipeline ● Add the map of pipeline steps ● Add all params to paa them into next step Create a workflow file: ● Handle the map of steps in the pipeline itself ● Ensure to pass all params to the next step Pipelines JC: Pipeline { imports = ["__pipeline"] jobClass { baseClassName = "Pipeline" classPath = "" } job { pipeline = [ Build: [ BRANCH_NAME:"master" ] ] } } Workflow(jenkins)file for (kv in mapToList(JC.job.pipeline)) { def pipeJob = kv[0] def pipelineParameters = [] for (paramskv in mapToList(kv[1])) { pipelineParameters.add([$class: 'StringParameterValue', name: paramskv[0], value: paramskv[1]]) } build job: JC.allJobs."${pipeJob}", parameters: pipelineParameters }
  • 29. 29 Complexity of real case ● Arrange files by their purposes and handle those locations ● Split the JCs and framework into separate repos or at least folders ● Create libraries and collections, to reuse them in Base Classes or elsewhere ● Create docs (or keep everything in mind)
  • 30. 30 ● To debug something, you need to start the seed process, so you need to push the code to the repo and use some non-master branch, which could take time ● Stack trace is so long for seed jobs and it is not very clear where did it fail ● Non-comprehensive errors appear during the seed process, if something fails PITA of debug
  • 31. 31 ● It will take some time to have ambiguous number of base classes for all cases in you work (yet you will come across situations, when you need to create new class) ● Maintaining the framework and infrastructural changes in it (e.g. adding storage to store JCs to use in inside pipelines) ● Engineers need time to start using it as a pro Time Consuming Development
  • 32. 32 Why and in what cases do you need such solution?
  • 33. 33 1. Laziness (obviously) Why do we need it? 5. Agility 2. Trackability 3. Simplification of configuration 4. Transparency
  • 34. 34 1. Personal framework to start automation 2. Application is a microservice hell 3. ~10 application to build out 4. Because you want to In what cases do we need it?
  • 35. 35 1. Only one application When we don’t need it 2. Support hasn’t been calculated 3. Small amount of jobs in Jenkins
  • 36. 36 Pros and Cons Pros: ● Super fast creation of jobs from scratch ● Version control ● Fixing issues with several jobs is simpler ● Adding generic functionality to existing jobs will be much easier Cons: ● Will take a while, before you get all classes created ● Debug is horrible ● Changing a single job will take you more time, than just changing it in UI instead ● Will work only, if you have big number of jobs to maintain