DEV Community

Cover image for Docker + Jenkins: Chemistry
AnupamMahapatra
AnupamMahapatra

Posted on

Docker + Jenkins: Chemistry

With jenkins you can use docker in two contexts.

1 - use docker container from a private repo as the jenkins node to build your code

2 - use jenkins node to build your docker container and probably push it to your private repo

This was confusing when i started and so i want to declutter this :

Assuming

  • you have a jenkins single agent cluster with docker daemon running on that agent.
  • a private docker registry with credentials to pull and push

use docker container from a private repo as the jenkins node to build your code

pipeline { /* start with outmost.*/ agent any /* This method fetches a container defination from the registered repo and build and runs the steps inside it.*/ stages { stage('Test') { agent { docker { image 'node:7-alpine' registryUrl 'https://my-docker-virtual.artifactory.rogers.com/' registryCredentialsId 'ARTIFACTORY_USER' } } steps { sh 'node --version' } } } } 
Enter fullscreen mode Exit fullscreen mode
  • IMPORTANT: Inside this container, i have no context of the docker which is running on bare metal jenkins. hence i have no context of the registry . I can not write a push command in the steps as i am inside the container.
  • I can also use a docker file as a agent definition instead of fetching a docker definition from registry
pipeline { agent { dockerfile true } stages { stage('Test') { steps { sh 'node --version' sh 'svn --version' } } } } 
Enter fullscreen mode Exit fullscreen mode
  • Here it is looking into the root directory for the Dockerfile which it will use as a build agent.

use jenkins node to build your docker container and probably push it to your private repo

node { checkout scm docker.withRegistry('https://registry.hub.docker.com','dockerhubcredentails'){ def myImage= docker.build("digitaldockerimages/busybox:0.0.1") /*push container to the registry*/ myImage.push() } } 
Enter fullscreen mode Exit fullscreen mode

Here i am using a private registry and fetching the credentials for the registry from jenkins secret storage.

Ref:

https://www.youtube.com/watch?v=z32yzy4TrKM

https://jenkins.io/doc/book/pipeline/docker/#sidecar

https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Controlling-your-build-environment

https://issues.jenkins-ci.org/browse/JENKINS-39684

Top comments (0)