SlideShare a Scribd company logo
https://cyclid.io @cyclidci github.com/Cyclid/
Continuous Integration is not
a solved problem
Config Management Camp, Gent 2017
https://cyclid.io @cyclidci github.com/Cyclid/
Kristian van der Vliet
● DevOpsing hard for the previous 7+ years
Puppet 0.24
Chef 0.9
● Gainfully employed as an SRE for a CDN company
● You may remember me from such projects as Syllable
● Don’t be fooled by the name, mijn Nederlands is niet
goed!
https://cyclid.io @cyclidci github.com/Cyclid/
Why isn’t CI a solved problem?
● I’ve seen many CI pipelines for things like Chef; I’ve never met one I liked
● Continuous Integration tools make assumptions
○ You’re “building” software
○ It will result in an “artifact”
○ Your software is one of a known set of languages
○ The build process is well defined
● None of these are true for “non-traditional” software
○ Configuration Management/Infrastructure as Code
○ Network configuration
○ Database schemas
https://cyclid.io @cyclidci github.com/Cyclid/
https://cyclid.io @cyclidci github.com/Cyclid/
“How hard can it be?”
https://cyclid.io @cyclidci github.com/Cyclid/
My ideal Continuous Integration
● Unopinionated Not tied to any workflow or toolset.
● Agnostic Tools change constantly.
● Flexible ...so do functional requirements.
● Operable I’m an Operations person!
● Open Source I’m also an Open Source person.
https://cyclid.io @cyclidci github.com/Cyclid/
https://cyclid.io @cyclidci github.com/Cyclid/
Unopinionated? Agnostic? Flexible? Operable? Open Source?
Jenkins Y Y Y N Y
Travis N N N N Note 1
CircleCI N N N - N
Codeship Y N N - N
GoCD Y N Y Note 2 Y
Semaphore Y N N - N
Concourse Y N Note 3 Note 4 Y
Drone Note 5 N N Y Y
1. Mostly Open Source but key components are not.
2. YUM/APT packages, but UI or giant XML configuration file of Doom configuration.
3. Concourse supports plugins but the plugin interface is basic.
4. Basic setup is simple (Go binary) but it gets complex, fast E.g. BOSH clusters. Lots of components.
5. Drone jobs are single scripts, so yes in the sense that you can anything you can do in a script.
https://cyclid.io @cyclidci github.com/Cyclid/
https://cyclid.io @cyclidci github.com/Cyclid/
● Written in Ruby, REST API
○ Boring technologies, because boring means well understood
○ I wanted plugins!
● “Everything is a plugin” philosophy
○ Even where something isn’t a plugin, it’s highly decoupled
● Keep the component & dependency footprint as small as possible
○ Cyclid, Nginx or Apache, Sidekiq, Redis, “a SQL database”
https://cyclid.io @cyclidci github.com/Cyclid/
Everything is a plugin
● Builder Create build instances to run jobs
● Transport Communicate with build instances
● Provisioner Configures build instances
● Action Do things when running a job
● Source Get the source(s) to build
● API Extend the core REST API
● Dispatcher Run a job somewhere
https://cyclid.io @cyclidci github.com/Cyclid/
Builders
● Google
● Digitalocean
● LXD
Provisioners
● Ubuntu
● Debian
Transports
● SSH
● LXD
Actions
● Command
● Script
● Log
● Slack
● Email
Sources
● Git
API
● Github
Dispatchers
● “Local” (Sidekiq)
https://cyclid.io @cyclidci github.com/Cyclid/
{
"name" : "minimal-example",
"environment": {
},
"stages" : [
{
"name" : "hello-world",
"steps" : [
{
"action" : "log",
"message" : "hello from %{name}"
}
]
}
],
"sequence" : [
{
"stage" : "hello-world"
}
]
}
● Jobs can be JSON or YAML
● Single file, with the source
● Defines the Environment,
Stages that make up the
Sequence and the Sequence
itself (pipeline)
https://cyclid.io @cyclidci github.com/Cyclid/
---
name: minimal-example
environment: {}
stages:
- name: hello-world
steps:
- action: log
message: Hello from %{name}
sequence:
- stage: hello-world
https://cyclid.io @cyclidci github.com/Cyclid/
2017-01-07 12:49:58 +0000 : Obtaining build host...
2017-01-07 12:51:38 +0000 : Preparing build host...
===============================================================================
===============================================================================
2017-01-07 12:51:38 +0000 : Job started. Context: {"job_id"=>88,
"job_name"=>"minimal-example", "job_version"=>"1.0.0", "organization"=>"test",
"name"=>"buildhost-a2713b62c93f7fd828c35261b1535614", "host"=>"104.197.96.230",
"username"=>"build", "workspace"=>"/home/build", "password"=>nil,
"key"=>"/etc/mist/id_rsa_build", "server"=>"prod-euw-build01", "distro"=>"ubuntu",
"release"=>"trusty"}
-------------------------------------------------------------------------------
2017-01-07 12:51:39 +0000 : Running stage hello-world v1.0.0
Hello from buildhost-a2713b62c93f7fd828c35261b1535614
https://cyclid.io @cyclidci github.com/Cyclid/
- name: bundle-install
steps:
- action: command
cmd: sudo gem install bundler --no-ri --no-doc
- action: command
cmd: bundle install --path vendor/bundle
path: '%{workspace}/Cyclid'
sequence:
- stage: bundle-install
on_success: lint
on_failure: failure
- stage: lint
on_success: rspec
on_failure: failure
...
https://cyclid.io @cyclidci github.com/Cyclid/
Even more jobs
● Environments
○ Operating System/Distro & version
○ Additional package repositories
○ Additional packages
● Sources
● Secrets
○ Tokens, passwords, keys etc.
● Stages can also be defined on the server
https://cyclid.io @cyclidci github.com/Cyclid/
$ cyclid org show
Name: test
Owner Email: operations@cyclid.io
Public Key: -----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----
Members:
vanders
$ cyclid job submit job.yaml
Job: 89
$ cyclid job status 89
Status: Waiting
$ cyclid job log 89
2017-01-07 13:38:04 +0000 : Obtaining build host...
...
https://cyclid.io @cyclidci github.com/Cyclid/
https://cyclid.io @cyclidci github.com/Cyclid/
The future!
https://cyclid.io @cyclidci github.com/Cyclid/
What we’ve learned from Config Mgmt
1. Flexibility is good
2. It’s fine to have more than one tool
Competition is good
3. Different tools and workflows suit different users
4. Composability is good
5. Data driven is good
DRY
https://cyclid.io @cyclidci github.com/Cyclid/
Composable CI
● Every CI job is a snowflake
● Cyclid is built with Composability in mind
○ Every Job & Stage is versioned
○ Stages can be defined on the server and used across different jobs
● Next: shareable Stages
○ We’ve already done it with Config Management (Forge, Supermarket, Modules
etc.)
○ Just another server with an API
○ ...but will require dependency management
https://cyclid.io @cyclidci github.com/Cyclid/
Data driven
● Data Driven is a natural requirement of Composability
● What would it even look for for Continuous Integration?
○ What data sources would be useful?
○ How do we organize that data?
○ How do we expose that data to both jobs & users?
● Jenkins is the closest with Parameterized Builds
○ Limited in scope
● I genuinely don’t know what this looks like
○ Let’s start the conversation!
https://cyclid.io @cyclidci github.com/Cyclid/
Logic
● Let’s stop pretending CI jobs don’t require logic
○ Stop externalizing the logic into shell scripts
● only_if/not_if
○ Same as conditionals on resources in Configuration Management tools
sequence:
- stage: release
only_if: %{branch} eq ‘master’
https://cyclid.io @cyclidci github.com/Cyclid/
Event Framework
● Cyclid jobs are run by a simple state machine
● Originally I tried to make “Notifiers” Action plugins
○ Whoops!
● Events will be emitted during the job run, and consumed by
plugins etc.
○ Fan-out & Fan-in (Pipelines!)
○ Proper Notifications, and Notification chains
○ Deep job introspection & profiling
○ Monitoring & Statistics
https://cyclid.io @cyclidci github.com/Cyclid/
Lots more
● More Plugins
○ AWS Builder
○ Redhat-ish Provisioner(s)
○ Not-Linux
○ Deployment
● Docker?
● Vagrant?
● Qemu?
https://cyclid.io @cyclidci github.com/Cyclid/
Questions?
https://cyclid.io @cyclidci github.com/Cyclid/
Thank you!
Website cyclid.io
Twitter @cyclidci
Github github.com/cyclid
Email contact@cyclid.io
kristian@cyclid.io

More Related Content

What's hot (20)

PPTX
The Saga of JavaScript and TypeScript: Part 1
Haci Murat Yaman
 
PDF
javerosmx-2015-marzo-groovy-java8-comparison
Domingo Suarez Torres
 
PPTX
Microsoft 2014 Dev Plataform - Roslyn -& ASP.NET vNext
Rodolfo Finochietti
 
PDF
Creating an api from design to security.
Roan Brasil Monteiro
 
PDF
Dsl로 만나는 groovy
Seeyoung Chang
 
PDF
One language to rule them all type script
Gil Fink
 
PDF
Chromium: NaCl and Pepper API
Chang W. Doh
 
PPTX
Intro to Kotlin Minia GDG DevFest 2017
Shady Selim
 
PDF
Kotlin Coroutines and Android sitting in a tree - 2018 version
Kai Koenig
 
PPTX
Refactoring to a SPA
Marcello Teodori
 
PPTX
.NET Fest 2017. Сергей Калинец. Функциональная веб-разработка на F#
NETFest
 
PDF
JavaScript Power Tools 2015
Marcello Teodori
 
PDF
[drupalday2017] - Decoupled frontend con Drupal 8 e OpenUI 5
DrupalDay
 
PDF
Is this Swift for Android? A short introduction to the Kotlin language
Antonis Lilis
 
PPTX
Exploring Ruby on Rails and PostgreSQL
Barry Jones
 
PDF
Intro to Crystal Programming Language
Adler Hsieh
 
PPTX
React Native
Artyom Trityak
 
PPTX
Migrating .NET Application to .NET Core
Baris Ceviz
 
PDF
Jedi knight
Antonio Mas
 
PDF
Anwendungsfälle für Elasticsearch JavaLand 2015
Florian Hopf
 
The Saga of JavaScript and TypeScript: Part 1
Haci Murat Yaman
 
javerosmx-2015-marzo-groovy-java8-comparison
Domingo Suarez Torres
 
Microsoft 2014 Dev Plataform - Roslyn -& ASP.NET vNext
Rodolfo Finochietti
 
Creating an api from design to security.
Roan Brasil Monteiro
 
Dsl로 만나는 groovy
Seeyoung Chang
 
One language to rule them all type script
Gil Fink
 
Chromium: NaCl and Pepper API
Chang W. Doh
 
Intro to Kotlin Minia GDG DevFest 2017
Shady Selim
 
Kotlin Coroutines and Android sitting in a tree - 2018 version
Kai Koenig
 
Refactoring to a SPA
Marcello Teodori
 
.NET Fest 2017. Сергей Калинец. Функциональная веб-разработка на F#
NETFest
 
JavaScript Power Tools 2015
Marcello Teodori
 
[drupalday2017] - Decoupled frontend con Drupal 8 e OpenUI 5
DrupalDay
 
Is this Swift for Android? A short introduction to the Kotlin language
Antonis Lilis
 
Exploring Ruby on Rails and PostgreSQL
Barry Jones
 
Intro to Crystal Programming Language
Adler Hsieh
 
React Native
Artyom Trityak
 
Migrating .NET Application to .NET Core
Baris Ceviz
 
Jedi knight
Antonio Mas
 
Anwendungsfälle für Elasticsearch JavaLand 2015
Florian Hopf
 

Similar to Continuous integration is not a solved problem (20)

PDF
Portable CI wGitLab and Github led by Gavin Pickin.pdf
Ortus Solutions, Corp
 
PDF
Continuous Delivery: 5 years later (Incontro DevOps 2018)
Giovanni Toraldo
 
PDF
GitOps , done Right
Kris Buytaert
 
PDF
Continuous Integration for Citizens
Mikhail Zyatin
 
PDF
Continuous Integration for Citizens
Mikhail Zyatin
 
PPTX
Agile Network India | Continuous Integration & Continuous Deployment & Automa...
AgileNetwork
 
PDF
Promise of DevOps
Juraj Hantak
 
KEY
Modern Continuous Software Delivery
Martin Logan
 
PPTX
Devops CI-CD pipeline with Containers
NuSpace
 
PDF
Continuous Integration from server to cloud
Paolo D'Incau
 
KEY
Continuous Integration In A PHP World
Idaf_1er
 
PPTX
03 - Continuous Integration
Sergii Shmarkatiuk
 
PDF
CICD_1670665418.pdf
edsonJeancarloRuedaS
 
PPTX
GitLab for CI/CD process
HYS Enterprise
 
PDF
Modern web dev_taxonomy
kevin_donovan
 
PPTX
Continuous Integration and development environment approach
Aleksandr Tsertkov
 
PDF
Into The Box 2018 CI Deep Dive
Ortus Solutions, Corp
 
PDF
Impact of CD, Clean Code, ... on Team Performance
Fredrik Wendt
 
PDF
CI/CD Using Ansible and Jenkins for Infrastructure
Faisal Shaikh
 
PPTX
Cloud Native Transformation (Alexis Richardson) - Continuous Lifecycle 2018 ...
Weaveworks
 
Portable CI wGitLab and Github led by Gavin Pickin.pdf
Ortus Solutions, Corp
 
Continuous Delivery: 5 years later (Incontro DevOps 2018)
Giovanni Toraldo
 
GitOps , done Right
Kris Buytaert
 
Continuous Integration for Citizens
Mikhail Zyatin
 
Continuous Integration for Citizens
Mikhail Zyatin
 
Agile Network India | Continuous Integration & Continuous Deployment & Automa...
AgileNetwork
 
Promise of DevOps
Juraj Hantak
 
Modern Continuous Software Delivery
Martin Logan
 
Devops CI-CD pipeline with Containers
NuSpace
 
Continuous Integration from server to cloud
Paolo D'Incau
 
Continuous Integration In A PHP World
Idaf_1er
 
03 - Continuous Integration
Sergii Shmarkatiuk
 
CICD_1670665418.pdf
edsonJeancarloRuedaS
 
GitLab for CI/CD process
HYS Enterprise
 
Modern web dev_taxonomy
kevin_donovan
 
Continuous Integration and development environment approach
Aleksandr Tsertkov
 
Into The Box 2018 CI Deep Dive
Ortus Solutions, Corp
 
Impact of CD, Clean Code, ... on Team Performance
Fredrik Wendt
 
CI/CD Using Ansible and Jenkins for Infrastructure
Faisal Shaikh
 
Cloud Native Transformation (Alexis Richardson) - Continuous Lifecycle 2018 ...
Weaveworks
 
Ad

Recently uploaded (20)

PPTX
BB FlashBack Pro 5.61.0.4843 With Crack Free Download
cracked shares
 
PDF
AI Prompts Cheat Code prompt engineering
Avijit Kumar Roy
 
PPTX
Transforming Insights: How Generative AI is Revolutionizing Data Analytics
LetsAI Solutions
 
PDF
Latest Capcut Pro 5.9.0 Crack Version For PC {Fully 2025
utfefguu
 
PPTX
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
PDF
Everything you need to know about pricing & licensing Microsoft 365 Copilot f...
Q-Advise
 
PDF
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
PPTX
Function & Procedure: Function Vs Procedure in PL/SQL
Shani Tiwari
 
PDF
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
PDF
Best Web development company in india 2025
Greenusys
 
PPTX
UI5con_2025_Accessibility_Ever_Evolving_
gerganakremenska1
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PDF
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
PPTX
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
PPTX
Get Started with Maestro: Agent, Robot, and Human in Action – Session 5 of 5
klpathrudu
 
PDF
MiniTool Power Data Recovery 8.8 With Crack New Latest 2025
bashirkhan333g
 
PDF
Dipole Tech Innovations – Global IT Solutions for Business Growth
dipoletechi3
 
PPTX
Build a Custom Agent for Agentic Testing.pptx
klpathrudu
 
PDF
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
BB FlashBack Pro 5.61.0.4843 With Crack Free Download
cracked shares
 
AI Prompts Cheat Code prompt engineering
Avijit Kumar Roy
 
Transforming Insights: How Generative AI is Revolutionizing Data Analytics
LetsAI Solutions
 
Latest Capcut Pro 5.9.0 Crack Version For PC {Fully 2025
utfefguu
 
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
Everything you need to know about pricing & licensing Microsoft 365 Copilot f...
Q-Advise
 
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
Function & Procedure: Function Vs Procedure in PL/SQL
Shani Tiwari
 
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
Best Web development company in india 2025
Greenusys
 
UI5con_2025_Accessibility_Ever_Evolving_
gerganakremenska1
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
Get Started with Maestro: Agent, Robot, and Human in Action – Session 5 of 5
klpathrudu
 
MiniTool Power Data Recovery 8.8 With Crack New Latest 2025
bashirkhan333g
 
Dipole Tech Innovations – Global IT Solutions for Business Growth
dipoletechi3
 
Build a Custom Agent for Agentic Testing.pptx
klpathrudu
 
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
Ad

Continuous integration is not a solved problem