Johan Janssen, Info Support
Continuous Delivery
DockerDocker
Jenkins build pipeline
Questions
Automate everything
Software quality
Continuous improvement
Regular deployments
Anyone can deploy
DevOps End users
Automate environment provisioning
Automate application deployment
Simple general commands
No Domain Specific Language (DSL)
Configuration with operating system commands
Disk space efficien...
Since March 2013
Soon: 1.0 production ready release
Around 400 contributorsAround 400 contributors
1.2M+ container downloa...
Docker on Ubuntu 14.04
apt-get install docker.io
docker.io run -i -t ubuntu:saucy
/bin/bash
FROM ubuntu:saucy
# Add oracle java 7 repository
RUN apt-get -y install software-properties-common
RUN add-apt-repository ...
FROM GeneralBase
RUN apt-get install -y wget unzip
RUN wget
http://dist.sonar.codehaus.org/sonarqube-http://dist.sonar.cod...
Create ‘Dockerfile’
Build the containers:Build the containers:
docker.io build -t GeneralBase .
docker.io build -t Sonar ....
# docker.io ps –a
CONTAINER ID: ecbecf77461b
IMAGE: Sonar:latest
COMMAND: /opt/sonarqube-4.2/bCOMMAND: /opt/sonarqube-4.2/...
Start / stop / restart
docker.io [start / stop / restart] containerid
Show processes running in container
docker.io top co...
Create image from container
docker.io commit containeriddocker.io commit containerid
username/imagename
docker.io push use...
GeneralBaseGeneralBaseGeneralBaseGeneralBase
AppServerBaseAppServerBaseAppServerBaseAppServerBase JenkinsJenkinsJenkinsJen...
Dockerfile
ENV JENKINS_HOME /var/JenkinsData
Docker commandsDocker commands
docker.io run -v /var/JenkinsData –name
Jenkin...
# docker.io images --tree
└─ 179.9 MB Tags: ubuntu:saucy
└─253.6 MB
└─741.8 MB Tags: GeneralBase:latest
└─763.6 MB Tags: A...
Stop containers
docker.io stop $(docker.io ps -a -q)
Remove containersRemove containers
docker.io rm $(docker.io ps -a -q)...
real 4m11.729sreal 4m11.729s
user 0m3.329s
sys 0m10.054s
Simple to use
Really popular
Used in many organizations
Regular updatesRegular updates
Big community creating plugins etc....
Continuous delivery
Continuous deployment
1
2
5
3
4
5
6
7
8
Execute job after several (parallel) jobs are finished.
FirstJob
ParallelJob1
ParallelJob2
LastJob
Good looking join
Complex workflow
EtceteraEtcetera
Advantage: Jenkins jobs are the basis
and can be reused.
Try to keep i...
Build Flow Plugin
oDomain Specific Language
oFeatures like retry, parallel,oFeatures like retry, parallel,
guard/rescue (s...
johan.janssen@infosupport.com
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
Upcoming SlideShare
Loading in...5
×

JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen

4,404

Published on

Continuous delivery is a powerful concept, but hard to achieve. One of the challenges is automating the setup of environments and the deployment of the Java EE applications. We have looked at and used quite some tools like for instance Chef, Puppet, Vagrant and Nolio. All tools had one thing in common: we had never used them. Why should we invest time in mastering those tools? There is a perfect alternative in Jenkins, a tool most developers are familiar with. Besides the basic Jenkins buildserver capabilities it offers quite some useful plugins like the Build Pipeline plugin. To setup environments the popular Docker project is used. Docker allows you to create containers from any application. Only some knowledge is required for the setup of the containers. The rest of the configuration is done through commands most people are quite familiar with.

Published in: Technology

JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen

  1. 1. Johan Janssen, Info Support
  2. 2. Continuous Delivery DockerDocker Jenkins build pipeline Questions
  3. 3. Automate everything Software quality Continuous improvement Regular deployments Anyone can deploy
  4. 4. DevOps End users
  5. 5. Automate environment provisioning Automate application deployment
  6. 6. Simple general commands No Domain Specific Language (DSL) Configuration with operating system commands Disk space efficiency Memory efficiency Speed Compatibility (run anywhere) Isolation
  7. 7. Since March 2013 Soon: 1.0 production ready release Around 400 contributorsAround 400 contributors 1.2M+ container downloads
  8. 8. Docker on Ubuntu 14.04 apt-get install docker.io docker.io run -i -t ubuntu:saucy /bin/bash
  9. 9. FROM ubuntu:saucy # Add oracle java 7 repository RUN apt-get -y install software-properties-common RUN add-apt-repository ppa:webupd8team/java RUN apt-get update && apt-get -y upgradeRUN apt-get update && apt-get -y upgrade # Accept the Oracle Java license RUN echo "oracle-java7-installer shared/accepted-oracle-license- v1-1 boolean true" | debconf-set-selections # Install Oracle Java RUN apt-get -y install oracle-java7-installer ENV JAVA_HOME /usr/lib/jvm/java-7-oracle
  10. 10. FROM GeneralBase RUN apt-get install -y wget unzip RUN wget http://dist.sonar.codehaus.org/sonarqube-http://dist.sonar.codehaus.org/sonarqube- 4.2.zip RUN unzip sonarqube-4.2.zip -d /opt RUN rm sonarqube-4.2.zip EXPOSE 9000 EXPOSE 9092 CMD ["/opt/sonarqube-4.2/bin/linux-x86- 64/sonar.sh", "console", "/bin/bash"]
  11. 11. Create ‘Dockerfile’ Build the containers:Build the containers: docker.io build -t GeneralBase . docker.io build -t Sonar . Start proces: docker.io run -p 9000:9000 –p 9092:9092 -d Sonar
  12. 12. # docker.io ps –a CONTAINER ID: ecbecf77461b IMAGE: Sonar:latest COMMAND: /opt/sonarqube-4.2/bCOMMAND: /opt/sonarqube-4.2/b CREATED: 32 minutes ago STATUS: Up 32 minutes PORTS: 0.0.0.0:9000->9000/tcp, 0.0.0.0:9092->9092/tcp NAMES: sick_nobel
  13. 13. Start / stop / restart docker.io [start / stop / restart] containerid Show processes running in container docker.io top containerid
  14. 14. Create image from container docker.io commit containeriddocker.io commit containerid username/imagename docker.io push username/imagename
  15. 15. GeneralBaseGeneralBaseGeneralBaseGeneralBase AppServerBaseAppServerBaseAppServerBaseAppServerBase JenkinsJenkinsJenkinsJenkins SonarSonarSonarSonar GitblitGitblitGitblitGitblit NexusNexusNexusNexus Environment DEnvironment DEnvironment DEnvironment D Environment TEnvironment TEnvironment TEnvironment T Environment AEnvironment AEnvironment AEnvironment A Environment PEnvironment PEnvironment PEnvironment P JenkinsDataContainerJenkinsDataContainerJenkinsDataContainerJenkinsDataContainer
  16. 16. Dockerfile ENV JENKINS_HOME /var/JenkinsData Docker commandsDocker commands docker.io run -v /var/JenkinsData –name JenkinsDataContainer ubuntu:saucy true docker.io run -p 8080:8080 --volumes-from JenkinsDataContainer -d Jenkins
  17. 17. # docker.io images --tree └─ 179.9 MB Tags: ubuntu:saucy └─253.6 MB └─741.8 MB Tags: GeneralBase:latest └─763.6 MB Tags: AppServerBase:latest└─763.6 MB Tags: AppServerBase:latest ├─763.6 MB Tags: EnvironmentP:latest ├─763.6 MB Tags: EnvironmentA:latest ├─763.6 MB Tags: EnvironmentT:latest └─763.6 MB Tags: EnvironmentD:latest └─865.6 MB Tags: Nexus:latest └─808.3 MB Tags: Gitblit:latest └─901.5 MB Tags: Sonar:latest └─805.4 MB Tags: Jenkins:latest
  18. 18. Stop containers docker.io stop $(docker.io ps -a -q) Remove containersRemove containers docker.io rm $(docker.io ps -a -q) Remove images docker.io rmi $(docker.io images -q)
  19. 19. real 4m11.729sreal 4m11.729s user 0m3.329s sys 0m10.054s
  20. 20. Simple to use Really popular Used in many organizations Regular updatesRegular updates Big community creating plugins etc. Most developers already use it
  21. 21. Continuous delivery Continuous deployment
  22. 22. 1 2 5 3 4 5 6 7 8
  23. 23. Execute job after several (parallel) jobs are finished. FirstJob ParallelJob1 ParallelJob2 LastJob
  24. 24. Good looking join Complex workflow EtceteraEtcetera Advantage: Jenkins jobs are the basis and can be reused. Try to keep it simple!
  25. 25. Build Flow Plugin oDomain Specific Language oFeatures like retry, parallel,oFeatures like retry, parallel, guard/rescue (similar to try/finally) Multijob Plugin Delivery Pipeline Plugin
  26. 26. johan.janssen@infosupport.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×