In this blog, I am going to walk you through the proper configuration of Docker plugin for Jenkins container slaves. Docker plugin is to be able to use a docker host to dynamically provision a slave, run a single build, then tear-down that slave. Optionally, the container can be committed, so that (for example) manual QA could be performed by the container being imported into a local docker provider, and run from there.
I assume, you have
1. A Jenkins instance with administrator privilege.
2. Install docker plugin to Jenkins
3. A working docker host
I have installed Jenkins on my OpenStack VM having IP address is 10.1.0.8 and Docker host working at another VM IP address 10.1.0.9
2. Preparing Environment
A. Prepare docker host
Your docker host needs to allow connections from a jenkins instance hosted on a different machine, you will need to open up the TCP port 2375. This can be achieved by editing the docker config file in
/etc/default/docker. Open this file in your favorite editor and do the underneath change:
$ sudo vi /etc/default/docker DOCKER_OPTS="-H tcp://10.1.0.9:2375 -H unix:///var/run/docker.sock"
B. Creating a docker image
You can pull a ready-made jenkins slave using docker pull command!
docker pull evarga/jenkins-slave
You need a docker image that has, as a minimum, an ssh server installed. You probably want a JDK, and you will also want a ‘jenkins’ user that can log in. For doing all follow blow activities:
$ docker run -i -t jenkins-slave /bin/bash root@044d879cbf8c:/# apt-get update root@044d879cbf8c:/# apt-get install git root@044d879cbf8c:/# exit
Once the container has been created, you need to commit it with a name to be used later, e.g: docker-slave-image
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 672a8e7ec179 evarga/jenkins-slave "/bin/bash" 5 weeks ago Exited (0) 5 weeks ago agitated_albattani $ docker commit 672a8e7ec179 docker-slave-image $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker-slave-image latest d8e5c82b7ce1 1 minutes ago 655.3 MB evarga/jenkins-slave latest 4df728e7f65f 16 months ago 610.8 MB
3. Jenkins Configuration
Docker appears in the ‘Cloud’ section of the Jenkins configuration, select “Docker” from the “Add a new cloud” drop down menu.
Docker turns up in the ‘Cloud’ section of the Jenkins configuration, Now pick “Docker” from the “Add a new cloud” drop down menu.
The project is now ready to run. If everything is set up correctly, Jenkins should start up a new Docker container, run the build, and then shut down the container.
Now, configure a job to use that “docker-slave-image” label as shown below:
Running that job, we will see that it successfully spins up a container of “docker-slave-image” and will build the job. Once build will complete, container will destroyed automatically.