Transcript
Page 1: Continuous Delivery with Docker and Jenkins Job Builder

Continuous Deliverywith

Docker &Jenkins Job Builder

Wouter Lagerweij@wouterla

Page 2: Continuous Delivery with Docker and Jenkins Job Builder

Prepare!

See the Readme.html in the main directory:● copy contents of usb stick to harddrive● open workshop-docker-jenkins dir● type ‘vagrant up’● type ‘vagrant ssh’● type ‘docker ps’

Page 4: Continuous Delivery with Docker and Jenkins Job Builder

The Goal

Pipeline view at Persgroep Online Services

Page 5: Continuous Delivery with Docker and Jenkins Job Builder

The Goal

Page 6: Continuous Delivery with Docker and Jenkins Job Builder

Automate Everything

● Everything in version control○ Including infrastructure○ Build server and configuration○ Deployment scripts

Page 7: Continuous Delivery with Docker and Jenkins Job Builder

We are going to...

● Automate creation of Jenkins Jobs● Automate creation of deployment package

(Docker container)● Automate deployment of Docker container● Automate creation of full Delivery Pipeline in

Jenkins

Page 8: Continuous Delivery with Docker and Jenkins Job Builder

Using

● Jenkins ● Jenkins Job Builder● Docker● Bash;-)

Page 9: Continuous Delivery with Docker and Jenkins Job Builder

docker run$ docker run -d -v /home/vagrant/.m2:/root/.m2

-v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 --name jenkins wouterla/docker-jenkins

● ports: -p <host-port>:<container-port>● volumes: -v <host-dir>:<container-dir>● -d: background● --name: to find it by● Image: <repository>/<name>:<tag>

https://docs.docker.com/reference/commandline/cli/

Page 10: Continuous Delivery with Docker and Jenkins Job Builder

Docker stop

docker stop <name>docker stop <container-id>docker rm <name>

docker ps

Page 11: Continuous Delivery with Docker and Jenkins Job Builder

Work

Start Jenkins container on port 8081

then

Stop, and switch back to 8080

Page 12: Continuous Delivery with Docker and Jenkins Job Builder

Running Jenkins Job Builder

docker run wouterla/docker-jenkins-job-builder

Needs access to jenkins!

docker run --link jenkins:jenkins wouterla/docker-jenkins-job-builder

● link: <container-name>:<alias>

Page 13: Continuous Delivery with Docker and Jenkins Job Builder

Our pipeline

Page 14: Continuous Delivery with Docker and Jenkins Job Builder

Jenkins Job Builder

● Jobs● Projects● Job Templates● Variables

Page 15: Continuous Delivery with Docker and Jenkins Job Builder
Page 16: Continuous Delivery with Docker and Jenkins Job Builder
Page 17: Continuous Delivery with Docker and Jenkins Job Builder
Page 18: Continuous Delivery with Docker and Jenkins Job Builder
Page 19: Continuous Delivery with Docker and Jenkins Job Builder

Variable types and scope

● project -> template● defaults● YAML references● macros● within and across files

Page 20: Continuous Delivery with Docker and Jenkins Job Builder

Project / template

Page 21: Continuous Delivery with Docker and Jenkins Job Builder

YAML references

Page 22: Continuous Delivery with Docker and Jenkins Job Builder

Macros

Page 23: Continuous Delivery with Docker and Jenkins Job Builder

Work

Add a new step to the pipeline that runs the maven ‘install’ goal

Page 24: Continuous Delivery with Docker and Jenkins Job Builder

Docker build

● -t <repository>/<name>:<tag>● . (or -f)

But today:

$> ./build_docker_jenkins_job_builder.sh

Page 25: Continuous Delivery with Docker and Jenkins Job Builder

Dockerfile

Page 26: Continuous Delivery with Docker and Jenkins Job Builder
Page 27: Continuous Delivery with Docker and Jenkins Job Builder

Work

Complete the Dockerfile for demo app, and build it locally

Hint: You can run the app with:java -jar jetty-runner.jar <war-file>

Page 28: Continuous Delivery with Docker and Jenkins Job Builder

Dockerfile

Page 29: Continuous Delivery with Docker and Jenkins Job Builder

Docker push/pull

● login● push <tag>● pull <tag>

Page 30: Continuous Delivery with Docker and Jenkins Job Builder

Work

Add step to pipeline that builds the docker image for our demo app

Page 31: Continuous Delivery with Docker and Jenkins Job Builder
Page 32: Continuous Delivery with Docker and Jenkins Job Builder

Work

● Add ‘test’ phase to pipeline● Add step that deploys demo app on port

8081

Page 33: Continuous Delivery with Docker and Jenkins Job Builder
Page 34: Continuous Delivery with Docker and Jenkins Job Builder

Work

Add ‘production’ phase and environment running on port 8082

Page 35: Continuous Delivery with Docker and Jenkins Job Builder

Work

Add second pipeline, building ‘workshop’ branch

Page 36: Continuous Delivery with Docker and Jenkins Job Builder

Work

Add ‘smoketest’ step to test and production phase

Page 37: Continuous Delivery with Docker and Jenkins Job Builder

Recommended