Download - JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Docker – Johan Janssen
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 commandsNo Domain Specific Language (DSL)Configuration with operating system commands
Disk space efficiencyMemory efficiencySpeedCompatibility (run anywhere)Isolation
Since March 2013Soon: 1.0 production ready releaseAround 400 contributorsAround 400 contributors1.2M+ container downloads
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 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
FROM GeneralBase
RUN apt-get install -y wget unzip
RUN wgethttp://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"]
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
# docker.io ps –a
CONTAINER ID: ecbecf77461b
IMAGE: Sonar:latest
COMMAND: /opt/sonarqube-4.2/b COMMAND: /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
Start / stop / restartdocker.io [start / stop / restart] containerid
Show processes running in containerdocker.io top containerid
Create image from container
docker.io commit containeriddocker.io commit containeridusername/imagename
docker.io push username/imagename
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
DockerfileENV JENKINS_HOME /var/JenkinsData
Docker commandsDocker commandsdocker.io run -v /var/JenkinsData –name
JenkinsDataContainer ubuntu:saucy true
docker.io run -p 8080:8080 --volumes-from
JenkinsDataContainer -d Jenkins
# 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
Stop containersdocker.io stop $(docker.io ps -a -q)
Remove containersRemove containersdocker.io rm $(docker.io ps -a -q)
Remove imagesdocker.io rmi $(docker.io images -q)
real 4m11.729sreal 4m11.729s
user 0m3.329s
sys 0m10.054s
Simple to useReally popular
Used in many organizationsRegular updatesRegular updatesBig community creating plugins etc.
Most developers already use it
Continuous delivery
Continuous deployment
1
25
34
5
6
7
8
Execute job after several (parallel) jobs are finished.
FirstJobParallelJob1ParallelJob2
LastJob
Good looking joinComplex workflowEtceteraEtcetera
Advantage: Jenkins jobs are the basis and can be reused.Try to keep it simple!
Build Flow PluginoDomain Specific LanguageoFeatures like retry, parallel, oFeatures like retry, parallel, guard/rescue (similar to try/finally)Multijob PluginDelivery Pipeline Plugin