As Jenkins' focus continues to expand from Continuous Integration to supporting Continuous Delivery, more and more Jenkins users are working on building out their Continuous Delivery Machine. This means identifying and choosing solutions for the many "adjacent problem spaces" to Continuous Integration: artifact management, feature tracking, environment provisioning, deployment automation, test management, pipeline orchestration, production feedback and many more.
For each of these areas, you have three main alternatives: use Jenkins, find a different tool and integrate it with Jenkins, or build something yourself. This presentation outlines the options for each category, with a special focus on app deployment, test result management and pipeline orchestration. It also features a couple of real-world Continuous Delivery Machine architectures, and analyzes some of the motivations for each organization's choices.
4. #jenkinsconf
Agenda
• The Big Picture: CI -> CD and beyond
• Components of your Continuous Delivery Machine
• Build, Buy or Use Jenkins?
• 3 Real-world Examples
4
7. #jenkinsconf
The Big Picture
• “We’re all moving to CD”
• “Faster, better, cheaper”
• Yada yada yada…you know the story
7
8. #jenkinsconf
The Big Picture
• CI: making sure your components “work together”
• CD: shipping those components regularly
• Beyond: moving to a high-frequency delivery process
with a feedback loop back to development and
product management
8
20. #jenkinsconf
Components of your Continuous
Delivery Machine
• Issue tracking
• SCM
• Continuous Integration
• Artifact repository
• Cloud management
• Environment provisioning
• Application release automation
• Test execution
• Test result management
20
21. #jenkinsconf
Components of your Continuous
Delivery Machine
• Issue tracking
• SCM
• Continuous Integration
• Artifact repository
• Cloud management
• Environment provisioning
• Application release automation
• Test execution
• Test result management
• Release coordination/Continuous Delivery Management (CDM)
21
22. #jenkinsconf
Components of your Continuous
Delivery Machine
• Issue tracking
• SCM
• Continuous Integration
• Artifact repository
• Cloud management
• Environment provisioning
• Application release automation
• Test execution
• Test result management
• Release coordination/Continuous Delivery Management (CDM)
• System-level monitoring
22
23. #jenkinsconf
Components of your Continuous
Delivery Machine
• Issue tracking
• SCM
• Continuous Integration
• Artifact repository
• Cloud management
• Environment provisioning
• Application release automation
• Test execution
• Test result management
• Release coordination/Continuous Delivery Management (CDM)
• System-level monitoring
• User-level monitoring
23
24. #jenkinsconf
Components of your Continuous
Delivery Machine
• Issue tracking
• SCM
• Continuous Integration
• Artifact repository
• Cloud management
• Environment provisioning
• Application release automation
• Test execution
• Test result management
• Release coordination/Continuous Delivery Management (CDM)
• System-level monitoring
• User-level monitoring
• Team collaboration
24
25. #jenkinsconf
Components of your Continuous
Delivery Machine
• Issue tracking
• SCM
• Continuous Integration
• Artifact repository
• Cloud management
• Environment provisioning
• Application release automation
• Test execution
• Test result management
• Release coordination/Continuous Delivery Management (CDM)
• System-level monitoring
• User-level monitoring
• Team collaboration
25
26. #jenkinsconf
Components of your Continuous
Delivery Machine
• These are all different logical categories of tools
• Separating out the functionality of each category
makes sense…
• …but that does not mean that you need each
category…
• …or that each category needs to be implemented by
a different tool
26
28. #jenkinsconf
Build, Buy or Use Jenkins?
• As a Jenkins user, you’re typically faced with one big
question for these categories:
28
29. #jenkinsconf
Build, Buy or Use Jenkins?
• As a Jenkins user, you’re typically faced with one big
question for these categories:
“Build, Buy or Use Jenkins?”
29
30. #jenkinsconf
Build, Buy or Use Jenkins?
30
Artifact repository
Continuous Integration
Test execution
Environment provisioning
Application release automation
Release coordination/CDM
Test result management
31. #jenkinsconf
Build, Buy or Use Jenkins?
31
Artifact repository
Continuous Integration
Test execution
Environment provisioning
Application release automation
Release coordination/CDM
Test result management
In general, the closer we stay to the “core”, the better
suited Jenkins is as a possible solution
32. #jenkinsconf
Build, Buy or Use Jenkins?
General tips:
• Consider Jenkins as an option mainly when you are
“close to the core”
• Consider the number of plugins and “run a script” steps
required to get Jenkins to “do what you need it to do”
• If what you need requires custom Jenkins plugin
development and/or many “run a script” steps, think
carefully
32
33. #jenkinsconf
Build, Buy or Use Jenkins?
Continuous Integration:
• “What Jenkins was built for”
• Lots of out-of-the-box support
• Lots of plugins
Recommendation: Use Jenkins
33
34. #jenkinsconf
Build, Buy or Use Jenkins?
Test execution:
• Plugins for many different testing tools
– Code-level as well as system-level
• Also integrations with hosted test services
Recommendation: Use Jenkins
34
35. #jenkinsconf
Build, Buy or Use Jenkins?
Artifact repository:
• Build artifacts, fingerprints and “keep forever” builds
provide the basic functionality
• Requires plugins to be usable from the build process
• Little “artifact due diligence” functionality
Recommendation: Buy or Use Jenkins
35
36. #jenkinsconf
Build, Buy or Use Jenkins?
Test result management:
• Jenkins test plugins have their own visualizations
• Some can “inherit” test results from other builds, but
this is still plugin-specific
• Poor or no ability to generate custom overviews
without hacking plugins
Recommendation: Buy or Build
36
37. #jenkinsconf
Build, Buy or Use Jenkins?
Environment provisioning:
• Jenkins’ notion of remote systems = slaves
• Not a great model for target environments
– Slave requirements, connectivity, access control etc.
etc.
• Lots of better tools available that integrate well with
Jenkins
Recommendation: Buy
37
38. #jenkinsconf
Build, Buy or Use Jenkins?
Application Release Automation:
• Depending on your packaging strategy, deployments
may be part of environment provisioning
• Some platforms (e.g. PaaS) handle this automatically
• Otherwise, quickly turns into lots of “run my script”
Recommendation: Buy. Use Jenkins if
deployments are handled by the target
38
39. #jenkinsconf
Build, Buy or Use Jenkins?
Release coordination/CDM:
• Doing this in Jenkins requires lots of plugins
(unwieldy) or Jenkins Workflow (programming)
• Think about maintainers, target audience, process
variation and level of interaction with business
systems
Recommendation: Buy. Use Jenkins if
your process is highly automated
39
40. #jenkinsconf
Components of your Continuous
Delivery Machine
• Continuous Integration
• Test execution
• Artifact repository
• Test result management
• Environment provisioning
• Application release automation
• Release coordination/CDM
40
43. #jenkinsconf
3 Real-world Examples
• Key Points
• Multiple types of target environments: PaaS and “in-
house platform”
• One end-to-end orchestration tool
• One main test tool so no need for test result
aggregation
45. #jenkinsconf
3 Real-world Examples
• Key Points
• Two orchestrators for the “technical” and “process-
heavy” parts of the software delivery process
– Also happening at different frequencies
• In-house developed test database
• Migrating from Puppet to Ansible
• Considering moving away from a “traditional” artifact
repo (Nexus -> S3?)
47. #jenkinsconf
3 Real-world Examples
• Key Points
• Container-based approach but still running on a
“traditional” cloud management platform
• No integrated team collaboration tool
• Investigating container orchestration frameworks to
handle challenges in tracking container
dependencies in the pipeline