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

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

What's hot (20)

The Saga of JavaScript and TypeScript: Part 1
The Saga of JavaScript and TypeScript: Part 1The Saga of JavaScript and TypeScript: Part 1
The Saga of JavaScript and TypeScript: Part 1
 
javerosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparisonjaverosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparison
 
Microsoft 2014 Dev Plataform - Roslyn -& ASP.NET vNext
Microsoft 2014 Dev Plataform -  Roslyn -& ASP.NET vNextMicrosoft 2014 Dev Plataform -  Roslyn -& ASP.NET vNext
Microsoft 2014 Dev Plataform - Roslyn -& ASP.NET vNext
 
Creating an api from design to security.
Creating an api from design to security.Creating an api from design to security.
Creating an api from design to security.
 
Dsl로 만나는 groovy
Dsl로 만나는 groovyDsl로 만나는 groovy
Dsl로 만나는 groovy
 
One language to rule them all type script
One language to rule them all type scriptOne language to rule them all type script
One language to rule them all type script
 
Chromium: NaCl and Pepper API
Chromium: NaCl and Pepper APIChromium: NaCl and Pepper API
Chromium: NaCl and Pepper API
 
Intro to Kotlin Minia GDG DevFest 2017
Intro to Kotlin Minia GDG DevFest 2017Intro to Kotlin Minia GDG DevFest 2017
Intro to Kotlin Minia GDG DevFest 2017
 
Kotlin Coroutines and Android sitting in a tree - 2018 version
Kotlin Coroutines and Android sitting in a tree - 2018 versionKotlin Coroutines and Android sitting in a tree - 2018 version
Kotlin Coroutines and Android sitting in a tree - 2018 version
 
Refactoring to a SPA
Refactoring to a SPARefactoring to a SPA
Refactoring to a SPA
 
.NET Fest 2017. Сергей Калинец. Функциональная веб-разработка на F#
.NET Fest 2017. Сергей Калинец. Функциональная веб-разработка на F#.NET Fest 2017. Сергей Калинец. Функциональная веб-разработка на F#
.NET Fest 2017. Сергей Калинец. Функциональная веб-разработка на F#
 
JavaScript Power Tools 2015
JavaScript Power Tools 2015JavaScript Power Tools 2015
JavaScript Power Tools 2015
 
[drupalday2017] - Decoupled frontend con Drupal 8 e OpenUI 5
[drupalday2017] - Decoupled frontend con Drupal 8 e OpenUI 5[drupalday2017] - Decoupled frontend con Drupal 8 e OpenUI 5
[drupalday2017] - Decoupled frontend con Drupal 8 e OpenUI 5
 
Is this Swift for Android? A short introduction to the Kotlin language
Is this Swift for Android? A short introduction to the Kotlin languageIs this Swift for Android? A short introduction to the Kotlin language
Is this Swift for Android? A short introduction to the Kotlin language
 
Exploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLExploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQL
 
Intro to Crystal Programming Language
Intro to Crystal Programming LanguageIntro to Crystal Programming Language
Intro to Crystal Programming Language
 
React Native
React NativeReact Native
React Native
 
Migrating .NET Application to .NET Core
Migrating .NET Application to .NET CoreMigrating .NET Application to .NET Core
Migrating .NET Application to .NET Core
 
Jedi knight
Jedi knightJedi knight
Jedi knight
 
Anwendungsfälle für Elasticsearch JavaLand 2015
Anwendungsfälle für Elasticsearch JavaLand 2015Anwendungsfälle für Elasticsearch JavaLand 2015
Anwendungsfälle für Elasticsearch JavaLand 2015
 

Similar to Continuous integration is not a solved problem

Who needs containers in a serverless world
Who needs containers in a serverless worldWho needs containers in a serverless world
Who needs containers in a serverless world
Matthias Luebken
 
Instant developer onboarding with self contained repositories
Instant developer onboarding with self contained repositoriesInstant developer onboarding with self contained repositories
Instant developer onboarding with self contained repositories
Yshay Yaacobi
 
Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...
Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...
Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...
Kaxil Naik
 
The state of Jenkins pipelines or do I still need freestyle jobs
The state of Jenkins pipelines or do I still need freestyle jobsThe state of Jenkins pipelines or do I still need freestyle jobs
The state of Jenkins pipelines or do I still need freestyle jobs
Andrey Devyatkin
 
Promise of DevOps
Promise of DevOpsPromise of DevOps
Promise of DevOps
Juraj Hantak
 
Super lazy side projects - Hamik Mukelyan
Super lazy side projects - Hamik MukelyanSuper lazy side projects - Hamik Mukelyan
Super lazy side projects - Hamik Mukelyan
Drew Malone
 
Continuous operations in AWS
Continuous operations in AWSContinuous operations in AWS
Continuous operations in AWS
Aleksandr Maklakov
 
Snowflake Automated Deployments / CI/CD Pipelines
Snowflake Automated Deployments / CI/CD PipelinesSnowflake Automated Deployments / CI/CD Pipelines
Snowflake Automated Deployments / CI/CD Pipelines
Drew Hansen
 
Gradle
GradleGradle
Gradle
Han Yin
 
DocDoku: Using web technologies in a desktop application. OW2con'15, November...
DocDoku: Using web technologies in a desktop application. OW2con'15, November...DocDoku: Using web technologies in a desktop application. OW2con'15, November...
DocDoku: Using web technologies in a desktop application. OW2con'15, November...
OW2
 
DocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDokuPLM presentation - OW2Con 2015 Community Award winnerDocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDoku
 
Enhance Your Kubernetes CI/CD Pipelines With GitLab & Open Source
Enhance Your Kubernetes CI/CD Pipelines With GitLab & Open SourceEnhance Your Kubernetes CI/CD Pipelines With GitLab & Open Source
Enhance Your Kubernetes CI/CD Pipelines With GitLab & Open Source
Nico Meisenzahl
 
AOT-compilation of JavaScript with V8
AOT-compilation of JavaScript with V8AOT-compilation of JavaScript with V8
AOT-compilation of JavaScript with V8
Phil Eaton
 
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud RunDesigning flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
wesley chun
 
The Self-Service Developer - GOTOCon CPH
The Self-Service Developer - GOTOCon CPHThe Self-Service Developer - GOTOCon CPH
The Self-Service Developer - GOTOCon CPH
Laszlo Fogas
 
Pentester++
Pentester++Pentester++
Pentester++
CTruncer
 
R meetup 20161011v2
R meetup 20161011v2R meetup 20161011v2
R meetup 20161011v2
Niels Ole Dam
 
Paris.py
Paris.pyParis.py
Survey of Container Build Tools
Survey of Container Build ToolsSurvey of Container Build Tools
Survey of Container Build Tools
Michael Ducy
 
Rejekts 24 EU No GitOps Pain, No Platform Gain
Rejekts 24 EU No GitOps Pain, No Platform GainRejekts 24 EU No GitOps Pain, No Platform Gain
Rejekts 24 EU No GitOps Pain, No Platform Gain
Łukasz Piątkowski
 

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

Who needs containers in a serverless world
Who needs containers in a serverless worldWho needs containers in a serverless world
Who needs containers in a serverless world
 
Instant developer onboarding with self contained repositories
Instant developer onboarding with self contained repositoriesInstant developer onboarding with self contained repositories
Instant developer onboarding with self contained repositories
 
Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...
Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...
Apache Airflow in the Cloud: Programmatically orchestrating workloads with Py...
 
The state of Jenkins pipelines or do I still need freestyle jobs
The state of Jenkins pipelines or do I still need freestyle jobsThe state of Jenkins pipelines or do I still need freestyle jobs
The state of Jenkins pipelines or do I still need freestyle jobs
 
Promise of DevOps
Promise of DevOpsPromise of DevOps
Promise of DevOps
 
Super lazy side projects - Hamik Mukelyan
Super lazy side projects - Hamik MukelyanSuper lazy side projects - Hamik Mukelyan
Super lazy side projects - Hamik Mukelyan
 
Continuous operations in AWS
Continuous operations in AWSContinuous operations in AWS
Continuous operations in AWS
 
Snowflake Automated Deployments / CI/CD Pipelines
Snowflake Automated Deployments / CI/CD PipelinesSnowflake Automated Deployments / CI/CD Pipelines
Snowflake Automated Deployments / CI/CD Pipelines
 
Gradle
GradleGradle
Gradle
 
DocDoku: Using web technologies in a desktop application. OW2con'15, November...
DocDoku: Using web technologies in a desktop application. OW2con'15, November...DocDoku: Using web technologies in a desktop application. OW2con'15, November...
DocDoku: Using web technologies in a desktop application. OW2con'15, November...
 
DocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDokuPLM presentation - OW2Con 2015 Community Award winnerDocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDokuPLM presentation - OW2Con 2015 Community Award winner
 
Enhance Your Kubernetes CI/CD Pipelines With GitLab & Open Source
Enhance Your Kubernetes CI/CD Pipelines With GitLab & Open SourceEnhance Your Kubernetes CI/CD Pipelines With GitLab & Open Source
Enhance Your Kubernetes CI/CD Pipelines With GitLab & Open Source
 
AOT-compilation of JavaScript with V8
AOT-compilation of JavaScript with V8AOT-compilation of JavaScript with V8
AOT-compilation of JavaScript with V8
 
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud RunDesigning flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
 
The Self-Service Developer - GOTOCon CPH
The Self-Service Developer - GOTOCon CPHThe Self-Service Developer - GOTOCon CPH
The Self-Service Developer - GOTOCon CPH
 
Pentester++
Pentester++Pentester++
Pentester++
 
R meetup 20161011v2
R meetup 20161011v2R meetup 20161011v2
R meetup 20161011v2
 
Paris.py
Paris.pyParis.py
Paris.py
 
Survey of Container Build Tools
Survey of Container Build ToolsSurvey of Container Build Tools
Survey of Container Build Tools
 
Rejekts 24 EU No GitOps Pain, No Platform Gain
Rejekts 24 EU No GitOps Pain, No Platform GainRejekts 24 EU No GitOps Pain, No Platform Gain
Rejekts 24 EU No GitOps Pain, No Platform Gain
 

Recently uploaded

AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
Google
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
Ayan Halder
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
Launch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in MinutesLaunch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in Minutes
Roshan Dwivedi
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
TheSMSPoint
 

Recently uploaded (20)

AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
Launch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in MinutesLaunch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in Minutes
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
 

Continuous integration is not a solved problem

  • 1. https://cyclid.io @cyclidci github.com/Cyclid/ Continuous Integration is not a solved problem Config Management Camp, Gent 2017
  • 2. 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!
  • 3. 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
  • 6. 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.
  • 8. 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.
  • 10. 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”
  • 11. 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
  • 12. 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)
  • 13. 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)
  • 14. 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
  • 15. 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
  • 16. 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 ...
  • 17. 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
  • 18. 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... ...
  • 21. 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
  • 22. 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
  • 23. 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!
  • 24. 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’
  • 25. 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
  • 26. https://cyclid.io @cyclidci github.com/Cyclid/ Lots more ● More Plugins ○ AWS Builder ○ Redhat-ish Provisioner(s) ○ Not-Linux ○ Deployment ● Docker? ● Vagrant? ● Qemu?
  • 28. 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