Jenkins trigger on-demand slaves in dockers
I’m looking for a way to run Jenkins jobs/build inside Jenkins slaves, dynamically (on-demand) started docker. Attaching schema for visual understanding.
What I’m actually looking for and my flow looks like:
1) Triggering Jenkins job (manually/git/gerrit)
2) Jenkins master (running in docker) starts slave machine docker (and pass script/instructions of the build)
3) Build is running on Jenkins slave (or slaves if parallel/pipeline)
4) Result returned to Jenkins master
5) Jenkins slave docker stops
Is it possible to do it this way?
2 Solutions collect form web for “Jenkins trigger on-demand slaves in dockers”
-
Docker slave image creation steps like installing openssh, user creation, mentioned in the below link. Install docker plugin from the below link.
Click here!
-
Go to jenkins global configuration, Under cloud headings, docker configuration will be there, enter docker host url with port number, credential not required. give some values for connection timeout & read timeout.
-
Under docker template – Enter the docker image name which we created in the point number 1.
-
Set Label number (Give this label name during Jenkins job creation and restrict to this slave name),
-
Select the usage option – > only build job with label restriction.
-
No of executor -> minimum 1. Select launch method as ssh, enter the user credential to login, which we created in docker image in the step number 1.
create a job restrict to docker slave label, run, ondemand it wil spun up container.
Use this plugin: https://wiki.jenkins-ci.org/display/JENKINS/Yet+Another+Docker+Plugin
After instalation (it requires Java 1.8) naviaget to configuration. There are two steps:
- configure docker “cloud”
- add “instances” (docker images) you want to run the build on
Every image should have label assigned – use this label in you job configuration to tell Jenkins explicitlyon which node the job should be run