SlideShare a Scribd company logo
CI with Docker and
Jenkins
Francesco Bruni
Club degli sviluppatori - Bari, May ‘19
@brunifrancesco
Who am I
•MSc Telecommunication Engineer @ Poliba
•Despite a Java background, I prefer Python whenever
possible
•I'm not a computer scientist

Continuous Integration
•Keep integrating multiple times a day the central code
repository;
•Run as more tests as you can to ensure nothing broke
down;
•Be ready to replicate environment.
Why CI matters
•Continuous testing/building for all teammates;
•Let someone do trivial jobs.
CI advantage
“Continuous Integration doesn’t get rid
of bugs, but it does make them
dramatically easier to find and remove”
M. Fowler
CI requirements
•Single source repo;
•Automated building;
•Self testing build;
•Build fast;
•Run tests in a production env clone;
•Automate deployment.
CI cycle
Develop Feature
Integrate in the
main code base
Test/build/label
Checkout code
Correct detected
iussues
CI and TDD
TDD
CI
CI cycle
•Integrating code should be automated;
•Multiple levels testing;
•Devs must not checkout bugged code;
•Devs must not deploy untested code;
CI drawbacks
•Setting files;
•Setting all the stuff up requires time and patience.
CI natural evolution:

Continuous Delivery
•If a commit builds (all tests succeed), deliver it;
•Keep delivery time at minimum;
•Multiple deliveries for multiple versions.
Know your tools
•Test everything;
•Keep your sources/setting files versioned;
•Containerize everything;
•Automate as much as you can.
Test everything
•Test your sources, checking coverage;
•Test for writing new features;
•Test your application settings;
•If you want to deliver software, check external
requirements.
Smarter use of VCs
•Keep code versioned: application settings/sources/dep
indexes;
•Keep env settings versioned: scripts and configuration
files;
•Enjoy version control well defined ‘flows’ :)
Be containerized
•Develop solutions in well separated envs;
•Ship software as main part of env;
•Don’t play with global deps.
•‘Restore’ basic envs to speed up env creation process.
What’s Docker
•Wrap many services in many
containers;
•Create, play with and destroy
containers;
•Save and easily replicate
isolated containers.
Dockerfiles
# pull base image.
FROM java:8
# maintainer details
MAINTAINER Francesco Bruni "francesco.bruni@stasbranger.com"
# update packages and install maven
RUN 
export DEBIAN_FRONTEND=noninteractive && 
sed -i 's/# (.*multiverse$)/1/g' /etc/apt/sources.list && 
apt-get update && 
apt-get -y upgrade && 
apt-get install -y vim wget curl git maven ssh nano python-pip
# attach volumes
VOLUME /volume/git
# create working directory and set some stuff up
RUN mkdir -p /local/git
WORKDIR /local/git
RUN mkdir -p /root/.ssh
ADD id_rsa /root/.ssh/id_rsa
RUN chmod 700 /root/.ssh/id_rsa
RUN echo "Host <ip>ntStrictHostKeyChecking non" >> /root/.ssh/config
COPY .m2 /root/.m2
COPY run.sh run.sh
RUN chmod a+x run.sh
# run this when container starts
CMD ["./run.sh"]
Automate procedures
•Repetitive tasks should be performed by automated
agents;
•Once you teach the agent what to do, it’s up to him to
fulfill the job.
What’s Jenkins
•Automated procedures worker;
•Run tasks, report final status,
log activities;
•Multiple plugin for multiple
features;
•Use it just for playing too :)
Deploy w/ Docker w/o
Jenkins
•Test code (or at least run a set of tests);
•Push code to repo;
•SSH in the server, enter in container;
•Pull changes and restart required services.
•Check if it works! :)
Practical session
•Integrate new code into the
main branch;
•Test all the stuff;
•Deploy it :)
What we’ll need
•A GIT web hook;
•Set private “credentials”;
•A tool to test configuration settings;
•A container to run the test suite;
•A container to run the new application;
•A pipeline.
GIT web hook
• Bind an action (tipically run a script) to GIT events;
• Notify Jenkins new code has been pushed over the
‘develop’ branch.
#! /bin/bash
read oldrev newrev _branch
tail=$(git log -1 --pretty=format:'%h %cn: %s%b' $newrev)
curl http://<ip>:8080/job/QW/build?
token=vH3YKmrRR5KOT4aeAOAV&commitMessage=
$tail&cause=JenkinsDeploy
Merge/Test
configurations
import os



main_path = os.path.join("src",
"main","resources","application.properties")

test_path = os.path.join("src",
"test","resources","application.properties")



for element in (main_path, test_path,):

with open(element) as old_main:

data = map(lambda line: line.strip(), old_main.readlines())

data[6] = data[6].replace("192.168.1.75", "mysql")

data[6] = data[6].replace("<myIp>", "mysql")





with open(element, "wb") as new_main:

new_main.write(“n".join(data))
Connection().quick_connect("user", "password", “db_test", "<myIp>")
Connection().quick_connect("user", "password", "db", "mysql")



Create the container
to run test suite
Run tests and see if they fails :)
Deploy the new
version
• Create the new container and run the new version;
• The new container should replace an existing one.
Going on production
No way, do some manual testing and start a new CD
build
All togheter
node {
stage 'Stage 1'
sh 'docker run --rm --link mysqlC:mysql --name sms-checklink-container
sms-checklink'
stage 'Stage 2'
sh 'docker rm -f sms-test-container || echo 'no container to delete''
sh 'docker run --rm --name sms-test-container --link mysqlC:mysql sms-
test'
stage 'Stage 3'
sh 'docker run --rm --name sms-merge-container sms-merge'
stage 'Stage 4'
sh 'docker rm -f sms-staging-container || echo 'no container to delete''
sh 'docker run -d -p 8433:8080 --name sms-staging-container --link
mysqlC:mysql sms-staging'
}
Conclusions
• Improve configuration settings handling;
• Reduce testing time;
• Bind Jenkins job to commit messages;
• Improve git-flow integration;
• Docker Compose :(
• Deploy project on production via manual tests.
References
Continuous Delivery

Reliable Software Releases through Build, Test,
and Deployment Automation
by Jez Humble and David Farley
Continuous Integration
by Martin Fowler

http://martinfowler.com/articles/continuousIntegration.html
References
Docker for beginners
https://scotch.io/tutorials/getting-started-with-docker
Meet Jenkins



https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins
Docker Explained: Using Dockerfiles to Automate
Building of Images
https://www.digitalocean.com/community/tutorials/
docker-explained-using-dockerfiles-to-automate-
building-of-images
Let’s see it @ work
Questions?
@brunifrancesco

More Related Content

What's hot (20)

PPTX
CI, CD with Docker, Jenkins and Tutum
Sreenivas Makam
 
PDF
Automate App Container Delivery with CI/CD and DevOps
Daniel Oh
 
PPTX
Simply your Jenkins Projects with Docker Multi-Stage Builds
Eric Smalling
 
PPTX
7 Habits of Highly Effective Jenkins Users
Jules Pierre-Louis
 
PDF
Jenkins & IaC
HungWei Chiu
 
PDF
DockerCon SF 2015: Enabling Microservices @Orbitz
Docker, Inc.
 
PPTX
Javaone 2014 - Git & Docker with Jenkins
Andy Pemberton
 
PDF
Testing with Docker
toffermann
 
PPTX
Seven Habits of Highly Effective Jenkins Users (2014 edition!)
Andrew Bayer
 
PPTX
Jenkins days workshop pipelines - Eric Long
ericlongtx
 
PPTX
Developer South Coast 2018: Docker on Windows - The Beginner's Guide
Elton Stoneman
 
PPTX
Ci with jenkins docker and mssql belgium
Chris Adkin
 
PPTX
Automated Deployment Pipeline using Jenkins, Puppet, Mcollective and AWS
Bamdad Dashtban
 
PDF
An Open-Source Chef Cookbook CI/CD Implementation Using Jenkins Pipelines
Steffen Gebert
 
PPTX
Next-gen DevOps engineering with Docker and Kubernetes by Antons Kranga
JavaDayUA
 
PDF
(Declarative) Jenkins Pipelines
Steffen Gebert
 
PPTX
Jenkins tutorial
Mamun Rashid, CCDH
 
PDF
Building kubectl plugins with Quarkus | DevNation Tech Talk
Red Hat Developers
 
PPTX
Developer South Coast 2018: Modernizing .NET Apps with Docker
Elton Stoneman
 
PDF
How to Improve Your Image Builds Using Advance Docker Build
Docker, Inc.
 
CI, CD with Docker, Jenkins and Tutum
Sreenivas Makam
 
Automate App Container Delivery with CI/CD and DevOps
Daniel Oh
 
Simply your Jenkins Projects with Docker Multi-Stage Builds
Eric Smalling
 
7 Habits of Highly Effective Jenkins Users
Jules Pierre-Louis
 
Jenkins & IaC
HungWei Chiu
 
DockerCon SF 2015: Enabling Microservices @Orbitz
Docker, Inc.
 
Javaone 2014 - Git & Docker with Jenkins
Andy Pemberton
 
Testing with Docker
toffermann
 
Seven Habits of Highly Effective Jenkins Users (2014 edition!)
Andrew Bayer
 
Jenkins days workshop pipelines - Eric Long
ericlongtx
 
Developer South Coast 2018: Docker on Windows - The Beginner's Guide
Elton Stoneman
 
Ci with jenkins docker and mssql belgium
Chris Adkin
 
Automated Deployment Pipeline using Jenkins, Puppet, Mcollective and AWS
Bamdad Dashtban
 
An Open-Source Chef Cookbook CI/CD Implementation Using Jenkins Pipelines
Steffen Gebert
 
Next-gen DevOps engineering with Docker and Kubernetes by Antons Kranga
JavaDayUA
 
(Declarative) Jenkins Pipelines
Steffen Gebert
 
Jenkins tutorial
Mamun Rashid, CCDH
 
Building kubectl plugins with Quarkus | DevNation Tech Talk
Red Hat Developers
 
Developer South Coast 2018: Modernizing .NET Apps with Docker
Elton Stoneman
 
How to Improve Your Image Builds Using Advance Docker Build
Docker, Inc.
 

Similar to Continuous Integration/Deployment with Docker and Jenkins (20)

PDF
Dependencies Managers in C/C++. Using stdcpp 2014
biicode
 
PDF
CICD_1670665418.pdf
edsonJeancarloRuedaS
 
PDF
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Michael Lihs
 
PDF
Jenkins Pipelines
Steffen Gebert
 
PDF
Webinar: Creating an Effective Docker Build Pipeline for Java Apps
Codefresh
 
PDF
Gianluca Varisco - DevOoops (Increase awareness around DevOps infra security)
Codemotion
 
PPTX
Dev ops meetup
Bigdata Meetup Kochi
 
PDF
Road to Opscon (Pisa '15) - DevOoops
Gianluca Varisco
 
PDF
Comment améliorer le quotidien des Développeurs PHP ?
AFUP_Limoges
 
PPTX
ASP.NET 5 auf Raspberry PI & docker
Jürgen Gutsch
 
PPTX
Continuous Integration & Development with Gitlab
Ayush Sharma
 
PPTX
Automating Software Development Life Cycle - A DevOps Approach
Akshaya Mahapatra
 
PDF
Test-Driven Infrastructure with Chef
Michael Lihs
 
PDF
Prescriptive System Security with InSpec
All Things Open
 
PPTX
Prescriptive Security with InSpec - All Things Open 2019
Mandi Walls
 
PPTX
drupal ci cd concept cornel univercity.pptx
rukuntravel
 
PDF
Deployment Tactics
Ian Barber
 
PPTX
Using Chef InSpec for Infrastructure Security
Mandi Walls
 
PDF
DCSF 19 Building Your Development Pipeline
Docker, Inc.
 
PPTX
InSpec For DevOpsDays Amsterdam 2017
Mandi Walls
 
Dependencies Managers in C/C++. Using stdcpp 2014
biicode
 
CICD_1670665418.pdf
edsonJeancarloRuedaS
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Michael Lihs
 
Jenkins Pipelines
Steffen Gebert
 
Webinar: Creating an Effective Docker Build Pipeline for Java Apps
Codefresh
 
Gianluca Varisco - DevOoops (Increase awareness around DevOps infra security)
Codemotion
 
Dev ops meetup
Bigdata Meetup Kochi
 
Road to Opscon (Pisa '15) - DevOoops
Gianluca Varisco
 
Comment améliorer le quotidien des Développeurs PHP ?
AFUP_Limoges
 
ASP.NET 5 auf Raspberry PI & docker
Jürgen Gutsch
 
Continuous Integration & Development with Gitlab
Ayush Sharma
 
Automating Software Development Life Cycle - A DevOps Approach
Akshaya Mahapatra
 
Test-Driven Infrastructure with Chef
Michael Lihs
 
Prescriptive System Security with InSpec
All Things Open
 
Prescriptive Security with InSpec - All Things Open 2019
Mandi Walls
 
drupal ci cd concept cornel univercity.pptx
rukuntravel
 
Deployment Tactics
Ian Barber
 
Using Chef InSpec for Infrastructure Security
Mandi Walls
 
DCSF 19 Building Your Development Pipeline
Docker, Inc.
 
InSpec For DevOpsDays Amsterdam 2017
Mandi Walls
 
Ad

More from Francesco Bruni (6)

PDF
pyconus22_complete.pdf
Francesco Bruni
 
PPTX
Four key factors to design a web of things based architecture
Francesco Bruni
 
PDF
Sparking pandas: an experiment
Francesco Bruni
 
PDF
Basic NLP with Python and NLTK
Francesco Bruni
 
PDF
Rethink programming: a functional approach
Francesco Bruni
 
PDF
Introduction to Functional Programming
Francesco Bruni
 
pyconus22_complete.pdf
Francesco Bruni
 
Four key factors to design a web of things based architecture
Francesco Bruni
 
Sparking pandas: an experiment
Francesco Bruni
 
Basic NLP with Python and NLTK
Francesco Bruni
 
Rethink programming: a functional approach
Francesco Bruni
 
Introduction to Functional Programming
Francesco Bruni
 
Ad

Recently uploaded (20)

PPTX
Tally software_Introduction_Presentation
AditiBansal54083
 
PPTX
Platform for Enterprise Solution - Java EE5
abhishekoza1981
 
PDF
Executive Business Intelligence Dashboards
vandeslie24
 
PDF
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
PDF
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
PDF
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
PPTX
How Apagen Empowered an EPC Company with Engineering ERP Software
SatishKumar2651
 
PDF
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
PDF
Efficient, Automated Claims Processing Software for Insurers
Insurance Tech Services
 
PDF
Beyond Binaries: Understanding Diversity and Allyship in a Global Workplace -...
Imma Valls Bernaus
 
PDF
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
PPTX
Writing Better Code - Helping Developers make Decisions.pptx
Lorraine Steyn
 
PPTX
Migrating Millions of Users with Debezium, Apache Kafka, and an Acyclic Synch...
MD Sayem Ahmed
 
PPTX
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
PDF
Understanding the Need for Systemic Change in Open Source Through Intersectio...
Imma Valls Bernaus
 
PDF
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
PDF
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
PDF
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
PPT
MergeSortfbsjbjsfk sdfik k
RafishaikIT02044
 
PPTX
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
Tally software_Introduction_Presentation
AditiBansal54083
 
Platform for Enterprise Solution - Java EE5
abhishekoza1981
 
Executive Business Intelligence Dashboards
vandeslie24
 
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
How Apagen Empowered an EPC Company with Engineering ERP Software
SatishKumar2651
 
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
Efficient, Automated Claims Processing Software for Insurers
Insurance Tech Services
 
Beyond Binaries: Understanding Diversity and Allyship in a Global Workplace -...
Imma Valls Bernaus
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
Writing Better Code - Helping Developers make Decisions.pptx
Lorraine Steyn
 
Migrating Millions of Users with Debezium, Apache Kafka, and an Acyclic Synch...
MD Sayem Ahmed
 
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
Understanding the Need for Systemic Change in Open Source Through Intersectio...
Imma Valls Bernaus
 
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
MergeSortfbsjbjsfk sdfik k
RafishaikIT02044
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 

Continuous Integration/Deployment with Docker and Jenkins

  • 1. CI with Docker and Jenkins Francesco Bruni Club degli sviluppatori - Bari, May ‘19 @brunifrancesco
  • 2. Who am I •MSc Telecommunication Engineer @ Poliba •Despite a Java background, I prefer Python whenever possible •I'm not a computer scientist

  • 3. Continuous Integration •Keep integrating multiple times a day the central code repository; •Run as more tests as you can to ensure nothing broke down; •Be ready to replicate environment.
  • 4. Why CI matters •Continuous testing/building for all teammates; •Let someone do trivial jobs.
  • 5. CI advantage “Continuous Integration doesn’t get rid of bugs, but it does make them dramatically easier to find and remove” M. Fowler
  • 6. CI requirements •Single source repo; •Automated building; •Self testing build; •Build fast; •Run tests in a production env clone; •Automate deployment.
  • 7. CI cycle Develop Feature Integrate in the main code base Test/build/label Checkout code Correct detected iussues
  • 9. CI cycle •Integrating code should be automated; •Multiple levels testing; •Devs must not checkout bugged code; •Devs must not deploy untested code;
  • 10. CI drawbacks •Setting files; •Setting all the stuff up requires time and patience.
  • 11. CI natural evolution:
 Continuous Delivery •If a commit builds (all tests succeed), deliver it; •Keep delivery time at minimum; •Multiple deliveries for multiple versions.
  • 12. Know your tools •Test everything; •Keep your sources/setting files versioned; •Containerize everything; •Automate as much as you can.
  • 13. Test everything •Test your sources, checking coverage; •Test for writing new features; •Test your application settings; •If you want to deliver software, check external requirements.
  • 14. Smarter use of VCs •Keep code versioned: application settings/sources/dep indexes; •Keep env settings versioned: scripts and configuration files; •Enjoy version control well defined ‘flows’ :)
  • 15. Be containerized •Develop solutions in well separated envs; •Ship software as main part of env; •Don’t play with global deps. •‘Restore’ basic envs to speed up env creation process.
  • 16. What’s Docker •Wrap many services in many containers; •Create, play with and destroy containers; •Save and easily replicate isolated containers.
  • 17. Dockerfiles # pull base image. FROM java:8 # maintainer details MAINTAINER Francesco Bruni "[email protected]" # update packages and install maven RUN export DEBIAN_FRONTEND=noninteractive && sed -i 's/# (.*multiverse$)/1/g' /etc/apt/sources.list && apt-get update && apt-get -y upgrade && apt-get install -y vim wget curl git maven ssh nano python-pip # attach volumes VOLUME /volume/git # create working directory and set some stuff up RUN mkdir -p /local/git WORKDIR /local/git RUN mkdir -p /root/.ssh ADD id_rsa /root/.ssh/id_rsa RUN chmod 700 /root/.ssh/id_rsa RUN echo "Host <ip>ntStrictHostKeyChecking non" >> /root/.ssh/config COPY .m2 /root/.m2 COPY run.sh run.sh RUN chmod a+x run.sh # run this when container starts CMD ["./run.sh"]
  • 18. Automate procedures •Repetitive tasks should be performed by automated agents; •Once you teach the agent what to do, it’s up to him to fulfill the job.
  • 19. What’s Jenkins •Automated procedures worker; •Run tasks, report final status, log activities; •Multiple plugin for multiple features; •Use it just for playing too :)
  • 20. Deploy w/ Docker w/o Jenkins •Test code (or at least run a set of tests); •Push code to repo; •SSH in the server, enter in container; •Pull changes and restart required services. •Check if it works! :)
  • 21. Practical session •Integrate new code into the main branch; •Test all the stuff; •Deploy it :)
  • 22. What we’ll need •A GIT web hook; •Set private “credentials”; •A tool to test configuration settings; •A container to run the test suite; •A container to run the new application; •A pipeline.
  • 23. GIT web hook • Bind an action (tipically run a script) to GIT events; • Notify Jenkins new code has been pushed over the ‘develop’ branch. #! /bin/bash read oldrev newrev _branch tail=$(git log -1 --pretty=format:'%h %cn: %s%b' $newrev) curl http://<ip>:8080/job/QW/build? token=vH3YKmrRR5KOT4aeAOAV&commitMessage= $tail&cause=JenkinsDeploy
  • 24. Merge/Test configurations import os
 
 main_path = os.path.join("src", "main","resources","application.properties")
 test_path = os.path.join("src", "test","resources","application.properties")
 
 for element in (main_path, test_path,):
 with open(element) as old_main:
 data = map(lambda line: line.strip(), old_main.readlines())
 data[6] = data[6].replace("192.168.1.75", "mysql")
 data[6] = data[6].replace("<myIp>", "mysql")
 
 
 with open(element, "wb") as new_main:
 new_main.write(“n".join(data)) Connection().quick_connect("user", "password", “db_test", "<myIp>") Connection().quick_connect("user", "password", "db", "mysql")
 

  • 25. Create the container to run test suite Run tests and see if they fails :)
  • 26. Deploy the new version • Create the new container and run the new version; • The new container should replace an existing one.
  • 27. Going on production No way, do some manual testing and start a new CD build
  • 28. All togheter node { stage 'Stage 1' sh 'docker run --rm --link mysqlC:mysql --name sms-checklink-container sms-checklink' stage 'Stage 2' sh 'docker rm -f sms-test-container || echo 'no container to delete'' sh 'docker run --rm --name sms-test-container --link mysqlC:mysql sms- test' stage 'Stage 3' sh 'docker run --rm --name sms-merge-container sms-merge' stage 'Stage 4' sh 'docker rm -f sms-staging-container || echo 'no container to delete'' sh 'docker run -d -p 8433:8080 --name sms-staging-container --link mysqlC:mysql sms-staging' }
  • 29. Conclusions • Improve configuration settings handling; • Reduce testing time; • Bind Jenkins job to commit messages; • Improve git-flow integration; • Docker Compose :( • Deploy project on production via manual tests.
  • 30. References Continuous Delivery
 Reliable Software Releases through Build, Test, and Deployment Automation by Jez Humble and David Farley Continuous Integration by Martin Fowler
 http://martinfowler.com/articles/continuousIntegration.html
  • 31. References Docker for beginners https://scotch.io/tutorials/getting-started-with-docker Meet Jenkins
 
 https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins Docker Explained: Using Dockerfiles to Automate Building of Images https://www.digitalocean.com/community/tutorials/ docker-explained-using-dockerfiles-to-automate- building-of-images
  • 32. Let’s see it @ work