You need the following ingredients 

 1. DbBacked builds ( https://github.com/groupon/DotCi ) , i.e no in memory 
build data.  
 2. NFS mount for 'jobs' folder to share console output, artifacts ect. 
 3. Message Passing between various masters ( eg: build queuing, build 
abort, queue abort ect ) . https://github.com/suryagaddipati/HaJenkins
 4. No shared agents. You could use any cloud plugin , although I like 
instant provisioning ones eg: 
https://github.com/suryagaddipati/jenkins-docker-swarm-plugin


Setup: 

 1. Install and configure plugins mentioned above
 2. Start multiple Jenkins instances with share mounted/symlinked  'jobs' 
folder . 
 3. Done. 


Method: 

 Build Create: When a build comes into the queue, it gets saved into redis 
queue 
<https://github.com/suryagaddipati/HaJenkins/blob/master/src/main/java/jenkins/ha/RedisQueue.java#L32-L35>
 ( 
I had to hack override Queue Implementation 
<https://github.com/suryagaddipati/HaJenkins/blob/master/src/main/java/jenkins/ha/PluginImpl.java#L17-L21>
 
to achieve this).  Build gets picked up any of the masters that are 
watching the queue. 
 Build Abort:  Aborting a 'ha build' puts a message into redis queue , which 
gets processed by all masters 
<https://github.com/suryagaddipati/HaJenkins/blob/master/src/main/java/jenkins/ha/PluginImpl.java#L40-L43>and
 
the master running the actual build aborts it. 
 Queued item Abort: Same mechanism as above ^. 
 Build Execution: Build execution happens in a dynamically created agent. 
 Build info is written to db via DotCi, and build logs are synced to all 
masters via NFS. 
 Build Delete: Build gets deleted in DotCi database. 




I've done some testing and this setup seems to work fine and is totally 
transparent to end user.  But I haven't done any extensive testing for edge 
cases.

I am curious to know what experts here think about this. What are the 
things that could go wrong with a setup like this? 


Surya

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-dev/6885ba79-8dbd-47d3-a9e5-8b3b45ad974b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to