Turnkey Continuous Delivery

TURNKEY CONTINUOUS
DELIVERY
Gianni Bombelli
bombelli@intre.it
https://github.com/bombix
https://www.linkedin.com/in/gianni-bombelli
Monza, 3 Dicembre 2018
1
EXTREME PROGRAMMING
continuous integration
ten minute build
integration whole team
slack
weekly cycle
monthly cycle
stories
planning
programming
incremental design
test-first programming
primary
energized work
programming
shared code
code &test
s
ingle code base
team continuity
shrinking teams
real customer involvement
root cause analysis
incremental deployment
dailydeployment
pay-per-use
negotiated scope contract
tea
m
business
coro
llary
XP Practices
Turnkey Continuous Delivery
2
CONTINUOUS INTEGRATION
Continuous Integration is a software
development practice where members of a
team integrate their work frequently, usually
each person integrates at least daily - leading
to multiple integrations per day. Each
integration is verified by an automated build
(including test) to detect integration errors as
quickly as possible. Many teams find that this
approach leads to significantly reduced
integration problems and allows a team to
develop cohesive software more rapidly.
Turnkey Continuous Delivery
3
CONTINUOUS ...
Kofy
Senaya
Director of
Product @
Clearbridge
Mobile
Continuous Delivery is similar to Continuous Integration. You
are building a product that can be released to production at
any time. Continuous Delivery requires building testing, and
releasing faster and more frequently. Continuous Integration
happens before you build as you are testing code. Delivery
means you can release something to the staging
environment or the pre-production environment.
Continuous Delivery is when your code is always ready to be
released but isn’t pushed to production unless you make the
decision to do so. It is a manual step. With Continuous
Deployment, any updated working version of the app is
automatically pushed to production.
Turnkey Continuous Delivery
4
TOOLS
Turnkey Continuous Delivery
5
WHAT DO WE DO NOW?
bootstrap our Continuous Delivery and test environment
configure the tools necessary to manage and build our
software
create our build Continuous Delivery pipeline
develop a simple micro-service
REST server
written in ES6
executed with Node.js
released as a docker image
Turnkey Continuous Delivery
6
REPOSITORIES
Build and Release Infrastructure
Example Project
Remove the remote named origin
Checkout the tag start
Reset master branch to the commit with the start tag
Turnkey Continuous Delivery
https://github.com/bombix/workshop-turnkey
https://github.com/intresrl/microservice-example-hex2hsl
7
INFRASTRUCTURE
Turnkey CD Testing Staging
Turnkey Continuous Delivery
Production
8
INFRASTRUCTURE AS CODE
Turnkey Continuous Delivery
9
WORKFLOW - F.1
Turnkey Continuous Delivery
10 . 1
WORKFLOW - F.2
Turnkey Continuous Delivery
10 . 2
WORKFLOW - F.2 MERGE
Turnkey Continuous Delivery
10 . 3
WORKFLOW - F.1 MERGE
Turnkey Continuous Delivery
10 . 4
BUILD AUTOMATIONPush
P
oll
Checkout Source Code
Static Code Analysis
Build
Test pre-deploy
Build Artifact
Push Artifact to Repo
Deploy & Run
Test post-deploy
Cleanup
Turnkey Continuous Delivery
11
ESERCIZIO 0
Turnkey Continuous Delivery
12 . 1
ESERCIZIO 0
Turnkey Continuous Delivery
12 . 2
ESERCIZIO 1
Turnkey Continuous Delivery
13 . 1
ESERCIZIO 1
Turnkey Continuous Delivery
13 . 2
ESERCIZIO 2
Turnkey Continuous Delivery
14 . 1
ESERCIZIO 2
Turnkey Continuous Delivery
14 . 2
ESERCIZIO 2
Turnkey Continuous Delivery
14 . 3
ESERCIZIO 3
Turnkey Continuous Delivery
15 . 1
ESERCIZIO 3
Turnkey Continuous Delivery
15 . 2
ESERCIZIO 3
Turnkey Continuous Delivery
15 . 3
ESERCIZIO 4
Turnkey Continuous Delivery
16 . 1
ESERCIZIO 4
Turnkey Continuous Delivery
16 . 2
ESERCIZIO 5
Turnkey Continuous Delivery
17 . 1
ESERCIZIO 5
Turnkey Continuous Delivery
17 . 2
ESERCIZIO 5
Turnkey Continuous Delivery
17 . 3
IT'S ENOUGH ?
single shared code-base
automated build & merge different branches
self-testing build
integrate every commit
ten-minutes build & fail fast!
everyone can see what's happening
end-to-end test
automated deployment
test the deployment
test in a production-like environment
Turnkey Continuous Delivery
18
NEXT STEPS ...
Build Artifact
Push to Artifact Repository
Deploy on a test or staging server
Run it
Execute the post-deployment tests
Turnkey Continuous Delivery
19
BUILD ARTIFACT AND PUSH
Turnkey Continuous Delivery
stage('Build Docker Image') {
def container-name = ${pipelineName}-${env.BRANCH_NAME}
sh "docker -H tcp://192.168.50.91:2375 build 
-t 192.168.50.91:5000/${container-name}:${env.BUILD_ID} 
-t 192.168.50.91:5000/${container-name}:latest ."
}
stage('Push to Docker Registry') {
def container-name = ${pipelineName}-${env.BRANCH_NAME}
sh "docker -H tcp://192.168.50.91:2375 
push 192.168.50.91:5000/${container-name}:${env.BUILD_ID}"
sh "docker -H tcp://192.168.50.91:2375 
push 192.168.50.91:5000/${container-name}:latest"
}
20
DEPLOY & RUN
Turnkey Continuous Delivery
stage ('Deploy and Run') {
if (env.BRANCH_NAME == 'master') {
print "Deploy docker container to : staging environmet"
sh "ansible-playbook -i /ansible/inventory/hosts.yml 
/ansible/hex2hsl.yml --limit staging"
} else {
print "Deploy docker container to : testing environmet"
sh "ansible-playbook -i /ansible/inventory/hosts.yml 
--extra-vars 'hex2hsl_branch=${env.BRANCH_NAME} hex2hsl_port=${test_
/ansible/hex2hsl.yml --limit testing"
}
}
21
TEST POST-DEPLOY
Turnkey Continuous Delivery
stage('Test post-deploy') {
def test_url = ''
if (env.BRANCH_NAME == 'master') {
test_url = 'http://192.168.50.93:3100'
} else {
test_url = 'http://192.168.50.92:' + test_port
}
sh "npm run test:post-deploy -- --test_url=${test_url}"
step([$class: 'XUnitBuilder',
thresholds: [[$class: 'FailedThreshold', unstableThreshold: '1']],
tools: [[$class: 'JUnitType',
pattern: 'test-report/test-post-deploy-report.xml']]])
}
}
22
AND NOW, IT'S ENOUGH ?
Regression tests: we always test everything
e2e tests: yes, post-deploy tests runs on staging
Security scans: only dependency audit performed by npm
Performance test: nope!
Deployment test: yes, deploy on staging environment
Turnkey Continuous Delivery
23
24
Special thanks to
Ferdinando Santacroce
@jesuswasrasta
25
26
1 of 38

Recommended

Continuous Integration and PHP by
Continuous Integration and PHPContinuous Integration and PHP
Continuous Integration and PHPArno Schneider
14.7K views34 slides
GitHub Actions for 5 minutes by
GitHub Actions for 5 minutesGitHub Actions for 5 minutes
GitHub Actions for 5 minutesSvetlin Nakov
234 views9 slides
Building the Test Automation Framework - Jenkins for Testers by
Building the Test Automation Framework - Jenkins for TestersBuilding the Test Automation Framework - Jenkins for Testers
Building the Test Automation Framework - Jenkins for TestersWilliam Echlin
2.3K views19 slides
Introduction to jenkins by
Introduction to jenkinsIntroduction to jenkins
Introduction to jenkinsAbe Diaz
12.9K views27 slides
Using CI for continuous delivery Part 1 by
Using CI for continuous delivery Part 1Using CI for continuous delivery Part 1
Using CI for continuous delivery Part 1Vishal Biyani
19.9K views22 slides
Continuous delivery with open source tools by
Continuous delivery with open source toolsContinuous delivery with open source tools
Continuous delivery with open source toolsSebastian Helzle
5.4K views24 slides

More Related Content

What's hot

Symfony2 Specification by examples by
Symfony2   Specification by examplesSymfony2   Specification by examples
Symfony2 Specification by examplesCorley S.r.l.
2.4K views53 slides
WebRTC - Brings Real-Time to the Web by
WebRTC - Brings Real-Time to the WebWebRTC - Brings Real-Time to the Web
WebRTC - Brings Real-Time to the WebVũ Nguyễn
1.2K views32 slides
Flask by
FlaskFlask
FlaskFadwa Gmiden
161 views16 slides
Jenkins to Gitlab - Intelligent Build-Pipelines by
Jenkins to Gitlab - Intelligent Build-PipelinesJenkins to Gitlab - Intelligent Build-Pipelines
Jenkins to Gitlab - Intelligent Build-PipelinesChristian Münch
2.7K views33 slides
Jenkins by
JenkinsJenkins
JenkinsRoger Xia
3.9K views16 slides
Jenkins by
JenkinsJenkins
JenkinsMohanRaviRohitth
1K views25 slides

What's hot(20)

Symfony2 Specification by examples by Corley S.r.l.
Symfony2   Specification by examplesSymfony2   Specification by examples
Symfony2 Specification by examples
Corley S.r.l.2.4K views
WebRTC - Brings Real-Time to the Web by Vũ Nguyễn
WebRTC - Brings Real-Time to the WebWebRTC - Brings Real-Time to the Web
WebRTC - Brings Real-Time to the Web
Vũ Nguyễn1.2K views
Jenkins to Gitlab - Intelligent Build-Pipelines by Christian Münch
Jenkins to Gitlab - Intelligent Build-PipelinesJenkins to Gitlab - Intelligent Build-Pipelines
Jenkins to Gitlab - Intelligent Build-Pipelines
Christian Münch2.7K views
Jenkins by Roger Xia
JenkinsJenkins
Jenkins
Roger Xia3.9K views
One click deployment with Jenkins - PHP Munich by Mayflower GmbH
One click deployment with Jenkins - PHP MunichOne click deployment with Jenkins - PHP Munich
One click deployment with Jenkins - PHP Munich
Mayflower GmbH8.5K views
Continuous Integration (Jenkins/Hudson) by Dennys Hsieh
Continuous Integration (Jenkins/Hudson)Continuous Integration (Jenkins/Hudson)
Continuous Integration (Jenkins/Hudson)
Dennys Hsieh44.2K views
Automate your build on Android with Jenkins by BeMyApp
Automate your build on Android with JenkinsAutomate your build on Android with Jenkins
Automate your build on Android with Jenkins
BeMyApp2.3K views
Continuous integration using Bamboo by Tudor Hornai
Continuous integration using BambooContinuous integration using Bamboo
Continuous integration using Bamboo
Tudor Hornai2.4K views
Scale your PHP application with Elastic Beanstalk - CloudParty Genova by Corley S.r.l.
Scale your PHP application with Elastic Beanstalk - CloudParty GenovaScale your PHP application with Elastic Beanstalk - CloudParty Genova
Scale your PHP application with Elastic Beanstalk - CloudParty Genova
Corley S.r.l.2.8K views
Git branching-model by Aaron Huang
Git branching-modelGit branching-model
Git branching-model
Aaron Huang5K views
Jenkins introduction by Gourav Varma
Jenkins introductionJenkins introduction
Jenkins introduction
Gourav Varma209 views
Testing Your Code as Part of an Industrial Grade Workflow by Pantheon
Testing Your Code as Part of an Industrial Grade WorkflowTesting Your Code as Part of an Industrial Grade Workflow
Testing Your Code as Part of an Industrial Grade Workflow
Pantheon691 views
Exploring the GitHub Service Universe by Björn Kimminich
Exploring the GitHub Service UniverseExploring the GitHub Service Universe
Exploring the GitHub Service Universe
Björn Kimminich9.5K views
Seamless Continuous Deployment Using Docker Containers by Faiz Bashir
Seamless Continuous Deployment Using Docker ContainersSeamless Continuous Deployment Using Docker Containers
Seamless Continuous Deployment Using Docker Containers
Faiz Bashir87 views
Setup Build & Deploy with Jenkins CI by walming
Setup Build & Deploy with Jenkins CISetup Build & Deploy with Jenkins CI
Setup Build & Deploy with Jenkins CI
walming1.8K views
Gitlab - Creating C++ applications with Gitlab CI by Uilian Ries
Gitlab - Creating C++ applications with Gitlab CIGitlab - Creating C++ applications with Gitlab CI
Gitlab - Creating C++ applications with Gitlab CI
Uilian Ries11K views

Similar to Turnkey Continuous Delivery

Release with confidence by
Release with confidenceRelease with confidence
Release with confidenceJohn Congdon
1.8K views35 slides
Continuous integration using jenkins by
Continuous integration using jenkinsContinuous integration using jenkins
Continuous integration using jenkinsVinay H G
1.5K views18 slides
Continous integration and delivery for single page applications by
Continous integration and delivery for single page applicationsContinous integration and delivery for single page applications
Continous integration and delivery for single page applicationsSunil Dalal
1.1K views29 slides
GitHub Actions (Nakov at RuseConf, Sept 2022) by
GitHub Actions (Nakov at RuseConf, Sept 2022)GitHub Actions (Nakov at RuseConf, Sept 2022)
GitHub Actions (Nakov at RuseConf, Sept 2022)Svetlin Nakov
133 views29 slides
Continuous Integration & Development with Gitlab by
Continuous Integration & Development with GitlabContinuous Integration & Development with Gitlab
Continuous Integration & Development with GitlabAyush Sharma
228 views21 slides
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011) by
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Fabrice Bernhard
3.8K views52 slides

Similar to Turnkey Continuous Delivery(20)

Release with confidence by John Congdon
Release with confidenceRelease with confidence
Release with confidence
John Congdon1.8K views
Continuous integration using jenkins by Vinay H G
Continuous integration using jenkinsContinuous integration using jenkins
Continuous integration using jenkins
Vinay H G1.5K views
Continous integration and delivery for single page applications by Sunil Dalal
Continous integration and delivery for single page applicationsContinous integration and delivery for single page applications
Continous integration and delivery for single page applications
Sunil Dalal1.1K views
GitHub Actions (Nakov at RuseConf, Sept 2022) by Svetlin Nakov
GitHub Actions (Nakov at RuseConf, Sept 2022)GitHub Actions (Nakov at RuseConf, Sept 2022)
GitHub Actions (Nakov at RuseConf, Sept 2022)
Svetlin Nakov133 views
Continuous Integration & Development with Gitlab by Ayush Sharma
Continuous Integration & Development with GitlabContinuous Integration & Development with Gitlab
Continuous Integration & Development with Gitlab
Ayush Sharma228 views
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011) by Fabrice Bernhard
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Fabrice Bernhard3.8K views
How to set up an ASP.NET 5 Continuous Delivery Pipeline using IBM Bluemix Dev... by Richard Johansson
How to set up an ASP.NET 5 Continuous Delivery Pipeline using IBM Bluemix Dev...How to set up an ASP.NET 5 Continuous Delivery Pipeline using IBM Bluemix Dev...
How to set up an ASP.NET 5 Continuous Delivery Pipeline using IBM Bluemix Dev...
Richard Johansson983 views
Simple tools to fight bigger quality battle by Anand Ramdeo
Simple tools to fight bigger quality battleSimple tools to fight bigger quality battle
Simple tools to fight bigger quality battle
Anand Ramdeo2.6K views
Better Operations into the Cloud by Fabio Ferrari
Better Operations  into the CloudBetter Operations  into the Cloud
Better Operations into the Cloud
Fabio Ferrari943 views
Arquitectura en detalle de una anatomia devops by Orlando Chamorro
Arquitectura en detalle de una anatomia devopsArquitectura en detalle de una anatomia devops
Arquitectura en detalle de una anatomia devops
Orlando Chamorro27 views
Anatomy of a Continuous Integration and Delivery (CICD) Pipeline by Robert McDermott
Anatomy of a Continuous Integration and Delivery (CICD) PipelineAnatomy of a Continuous Integration and Delivery (CICD) Pipeline
Anatomy of a Continuous Integration and Delivery (CICD) Pipeline
Robert McDermott80.2K views
Docker for Developers - Part 2 by Borja Burgos and Fernando Mayo by Docker, Inc.
Docker for Developers - Part 2 by Borja Burgos and Fernando MayoDocker for Developers - Part 2 by Borja Burgos and Fernando Mayo
Docker for Developers - Part 2 by Borja Burgos and Fernando Mayo
Docker, Inc.10.1K views
CI CD Jenkins for Swift Deployment by Bintang Thunder
CI CD Jenkins for Swift DeploymentCI CD Jenkins for Swift Deployment
CI CD Jenkins for Swift Deployment
Bintang Thunder193 views
Continuous Integration using Cruise Control by elliando dias
Continuous Integration using Cruise ControlContinuous Integration using Cruise Control
Continuous Integration using Cruise Control
elliando dias1.2K views
TMF2014 CI-CD Workshop Michael Palotas by KJR
TMF2014 CI-CD Workshop Michael PalotasTMF2014 CI-CD Workshop Michael Palotas
TMF2014 CI-CD Workshop Michael Palotas
KJR719 views
Agile Bodensee - Testautomation & Continuous Delivery Workshop by Michael Palotas
Agile Bodensee - Testautomation & Continuous Delivery WorkshopAgile Bodensee - Testautomation & Continuous Delivery Workshop
Agile Bodensee - Testautomation & Continuous Delivery Workshop
Michael Palotas1.1K views
Modern Release Engineering in a Nutshell - Why Researchers should Care! by Bram Adams
Modern Release Engineering in a Nutshell - Why Researchers should Care!Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!
Bram Adams751 views

Recently uploaded

Fleet Management Software in India by
Fleet Management Software in India Fleet Management Software in India
Fleet Management Software in India Fleetable
11 views1 slide
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx by
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptxanimuscrm
15 views19 slides
Navigating container technology for enhanced security by Niklas Saari by
Navigating container technology for enhanced security by Niklas SaariNavigating container technology for enhanced security by Niklas Saari
Navigating container technology for enhanced security by Niklas SaariMetosin Oy
14 views34 slides
EV Charging App Case by
EV Charging App Case EV Charging App Case
EV Charging App Case iCoderz Solutions
5 views1 slide
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft... by
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...Deltares
7 views18 slides
Programming Field by
Programming FieldProgramming Field
Programming Fieldthehardtechnology
5 views9 slides

Recently uploaded(20)

Fleet Management Software in India by Fleetable
Fleet Management Software in India Fleet Management Software in India
Fleet Management Software in India
Fleetable11 views
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx by animuscrm
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx
2023-November-Schneider Electric-Meetup-BCN Admin Group.pptx
animuscrm15 views
Navigating container technology for enhanced security by Niklas Saari by Metosin Oy
Navigating container technology for enhanced security by Niklas SaariNavigating container technology for enhanced security by Niklas Saari
Navigating container technology for enhanced security by Niklas Saari
Metosin Oy14 views
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft... by Deltares
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...
Deltares7 views
DSD-INT 2023 European Digital Twin Ocean and Delft3D FM - Dols by Deltares
DSD-INT 2023 European Digital Twin Ocean and Delft3D FM - DolsDSD-INT 2023 European Digital Twin Ocean and Delft3D FM - Dols
DSD-INT 2023 European Digital Twin Ocean and Delft3D FM - Dols
Deltares9 views
Gen Apps on Google Cloud PaLM2 and Codey APIs in Action by Márton Kodok
Gen Apps on Google Cloud PaLM2 and Codey APIs in ActionGen Apps on Google Cloud PaLM2 and Codey APIs in Action
Gen Apps on Google Cloud PaLM2 and Codey APIs in Action
Márton Kodok6 views
BushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports by Ra'Fat Al-Msie'deen
BushraDBR: An Automatic Approach to Retrieving Duplicate Bug ReportsBushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports
BushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports
DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h... by Deltares
DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h...DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h...
DSD-INT 2023 Exploring flash flood hazard reduction in arid regions using a h...
Deltares9 views
Dapr Unleashed: Accelerating Microservice Development by Miroslav Janeski
Dapr Unleashed: Accelerating Microservice DevelopmentDapr Unleashed: Accelerating Microservice Development
Dapr Unleashed: Accelerating Microservice Development
Miroslav Janeski10 views
Advanced API Mocking Techniques by Dimpy Adhikary
Advanced API Mocking TechniquesAdvanced API Mocking Techniques
Advanced API Mocking Techniques
Dimpy Adhikary19 views
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P... by NimaTorabi2
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...
NimaTorabi212 views
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra... by Marc Müller
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra....NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra...
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra...
Marc Müller40 views
Ports-and-Adapters Architecture for Embedded HMI by Burkhard Stubert
Ports-and-Adapters Architecture for Embedded HMIPorts-and-Adapters Architecture for Embedded HMI
Ports-and-Adapters Architecture for Embedded HMI
Burkhard Stubert21 views

Turnkey Continuous Delivery

  • 2. EXTREME PROGRAMMING continuous integration ten minute build integration whole team slack weekly cycle monthly cycle stories planning programming incremental design test-first programming primary energized work programming shared code code &test s ingle code base team continuity shrinking teams real customer involvement root cause analysis incremental deployment dailydeployment pay-per-use negotiated scope contract tea m business coro llary XP Practices Turnkey Continuous Delivery 2
  • 3. CONTINUOUS INTEGRATION Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly. Turnkey Continuous Delivery 3
  • 4. CONTINUOUS ... Kofy Senaya Director of Product @ Clearbridge Mobile Continuous Delivery is similar to Continuous Integration. You are building a product that can be released to production at any time. Continuous Delivery requires building testing, and releasing faster and more frequently. Continuous Integration happens before you build as you are testing code. Delivery means you can release something to the staging environment or the pre-production environment. Continuous Delivery is when your code is always ready to be released but isn’t pushed to production unless you make the decision to do so. It is a manual step. With Continuous Deployment, any updated working version of the app is automatically pushed to production. Turnkey Continuous Delivery 4
  • 6. WHAT DO WE DO NOW? bootstrap our Continuous Delivery and test environment configure the tools necessary to manage and build our software create our build Continuous Delivery pipeline develop a simple micro-service REST server written in ES6 executed with Node.js released as a docker image Turnkey Continuous Delivery 6
  • 7. REPOSITORIES Build and Release Infrastructure Example Project Remove the remote named origin Checkout the tag start Reset master branch to the commit with the start tag Turnkey Continuous Delivery https://github.com/bombix/workshop-turnkey https://github.com/intresrl/microservice-example-hex2hsl 7
  • 8. INFRASTRUCTURE Turnkey CD Testing Staging Turnkey Continuous Delivery Production 8
  • 9. INFRASTRUCTURE AS CODE Turnkey Continuous Delivery 9
  • 10. WORKFLOW - F.1 Turnkey Continuous Delivery 10 . 1
  • 11. WORKFLOW - F.2 Turnkey Continuous Delivery 10 . 2
  • 12. WORKFLOW - F.2 MERGE Turnkey Continuous Delivery 10 . 3
  • 13. WORKFLOW - F.1 MERGE Turnkey Continuous Delivery 10 . 4
  • 14. BUILD AUTOMATIONPush P oll Checkout Source Code Static Code Analysis Build Test pre-deploy Build Artifact Push Artifact to Repo Deploy & Run Test post-deploy Cleanup Turnkey Continuous Delivery 11
  • 30. IT'S ENOUGH ? single shared code-base automated build & merge different branches self-testing build integrate every commit ten-minutes build & fail fast! everyone can see what's happening end-to-end test automated deployment test the deployment test in a production-like environment Turnkey Continuous Delivery 18
  • 31. NEXT STEPS ... Build Artifact Push to Artifact Repository Deploy on a test or staging server Run it Execute the post-deployment tests Turnkey Continuous Delivery 19
  • 32. BUILD ARTIFACT AND PUSH Turnkey Continuous Delivery stage('Build Docker Image') { def container-name = ${pipelineName}-${env.BRANCH_NAME} sh "docker -H tcp://192.168.50.91:2375 build -t 192.168.50.91:5000/${container-name}:${env.BUILD_ID} -t 192.168.50.91:5000/${container-name}:latest ." } stage('Push to Docker Registry') { def container-name = ${pipelineName}-${env.BRANCH_NAME} sh "docker -H tcp://192.168.50.91:2375 push 192.168.50.91:5000/${container-name}:${env.BUILD_ID}" sh "docker -H tcp://192.168.50.91:2375 push 192.168.50.91:5000/${container-name}:latest" } 20
  • 33. DEPLOY & RUN Turnkey Continuous Delivery stage ('Deploy and Run') { if (env.BRANCH_NAME == 'master') { print "Deploy docker container to : staging environmet" sh "ansible-playbook -i /ansible/inventory/hosts.yml /ansible/hex2hsl.yml --limit staging" } else { print "Deploy docker container to : testing environmet" sh "ansible-playbook -i /ansible/inventory/hosts.yml --extra-vars 'hex2hsl_branch=${env.BRANCH_NAME} hex2hsl_port=${test_ /ansible/hex2hsl.yml --limit testing" } } 21
  • 34. TEST POST-DEPLOY Turnkey Continuous Delivery stage('Test post-deploy') { def test_url = '' if (env.BRANCH_NAME == 'master') { test_url = 'http://192.168.50.93:3100' } else { test_url = 'http://192.168.50.92:' + test_port } sh "npm run test:post-deploy -- --test_url=${test_url}" step([$class: 'XUnitBuilder', thresholds: [[$class: 'FailedThreshold', unstableThreshold: '1']], tools: [[$class: 'JUnitType', pattern: 'test-report/test-post-deploy-report.xml']]]) } } 22
  • 35. AND NOW, IT'S ENOUGH ? Regression tests: we always test everything e2e tests: yes, post-deploy tests runs on staging Security scans: only dependency audit performed by npm Performance test: nope! Deployment test: yes, deploy on staging environment Turnkey Continuous Delivery 23
  • 36. 24
  • 37. Special thanks to Ferdinando Santacroce @jesuswasrasta 25
  • 38. 26