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 jenkinsci-dev+unsubscr...@googlegroups.com.
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