SlideShare a Scribd company logo
1 of 28
Download to read offline
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 1Haci Murat Yaman
 
javerosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparisonjaverosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparisonDomingo 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 vNextRodolfo 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로 만나는 groovySeeyoung 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 scriptGil Fink
 
Chromium: NaCl and Pepper API
Chromium: NaCl and Pepper APIChromium: NaCl and Pepper API
Chromium: NaCl and Pepper APIChang 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 2017Shady 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 versionKai Koenig
 
.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 2015Marcello 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 5DrupalDay
 
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 languageAntonis Lilis
 
Exploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLExploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLBarry Jones
 
Intro to Crystal Programming Language
Intro to Crystal Programming LanguageIntro to Crystal Programming Language
Intro to Crystal Programming LanguageAdler Hsieh
 
Migrating .NET Application to .NET Core
Migrating .NET Application to .NET CoreMigrating .NET Application to .NET Core
Migrating .NET Application to .NET CoreBaris Ceviz
 
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 2015Florian 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 worldMatthias 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 repositoriesYshay 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 jobsAndrey Devyatkin
 
Super lazy side projects - Hamik Mukelyan
Super lazy side projects - Hamik MukelyanSuper lazy side projects - Hamik Mukelyan
Super lazy side projects - Hamik MukelyanDrew Malone
 
Snowflake Automated Deployments / CI/CD Pipelines
Snowflake Automated Deployments / CI/CD PipelinesSnowflake Automated Deployments / CI/CD Pipelines
Snowflake Automated Deployments / CI/CD PipelinesDrew Hansen
 
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 winnerDocDoku
 
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 SourceNico Meisenzahl
 
AOT-compilation of JavaScript with V8
AOT-compilation of JavaScript with V8AOT-compilation of JavaScript with V8
AOT-compilation of JavaScript with V8Phil 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 Runwesley chun
 
The Self-Service Developer - GOTOCon CPH
The Self-Service Developer - GOTOCon CPHThe Self-Service Developer - GOTOCon CPH
The Self-Service Developer - GOTOCon CPHLaszlo Fogas
 
Pentester++
Pentester++Pentester++
Pentester++CTruncer
 
Survey of Container Build Tools
Survey of Container Build ToolsSurvey of Container Build Tools
Survey of Container Build ToolsMichael 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

英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in NoidaBuds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in Noidabntitsolutionsrishis
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 

Recently uploaded (20)

英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in NoidaBuds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 

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