22
33import hudson .Extension ;
44import hudson .Launcher ;
5- import hudson .model .*;
5+ import hudson .model .BuildListener ;
6+ import hudson .model .AbstractBuild ;
7+ import hudson .model .Computer ;
8+ import hudson .model .Descriptor ;
9+ import hudson .model .Executor ;
610import hudson .tasks .BuildWrapper ;
711import hudson .util .FormValidation ;
12+
13+ import java .io .IOException ;
14+ import java .io .PrintStream ;
15+ import java .util .ArrayList ;
16+ import java .util .HashMap ;
17+ import java .util .HashSet ;
18+ import java .util .List ;
19+ import java .util .Map ;
20+ import java .util .regex .Pattern ;
21+
22+ import jenkins .model .Jenkins ;
23+ import jenkins .model .Jenkins .MasterComputer ;
824import net .sf .json .JSONObject ;
25+
926import org .apache .commons .logging .Log ;
1027import org .apache .commons .logging .LogFactory ;
1128import org .kohsuke .stapler .QueryParameter ;
1229import org .kohsuke .stapler .StaplerRequest ;
1330
14- import java .io .IOException ;
15- import java .io .PrintStream ;
16- import java .util .*;
17- import java .util .regex .Pattern ;
18-
1931/**
2032 * Allocates TCP Ports on a Computer for consumption and sets it as
2133 * environment variables, see configuration
@@ -39,7 +51,8 @@ private PortAllocator(PortType[] ports){
3951 @ Override
4052 public Environment setUp (AbstractBuild build , Launcher launcher , BuildListener listener ) throws IOException , InterruptedException {
4153 PrintStream logger = listener .getLogger ();
42-
54+
55+ final Computer master = Jenkins .getInstance ().toComputer ();
4356 final Computer cur = Executor .currentExecutor ().getOwner ();
4457 Map <String ,Integer > prefPortMap = new HashMap <String ,Integer >();
4558 if (build .getPreviousBuild () != null ) {
@@ -49,14 +62,22 @@ public Environment setUp(AbstractBuild build, Launcher launcher, BuildListener l
4962 prefPortMap = prevAlloc .getPreviousAllocatedPorts ();
5063 }
5164 }
65+ final PortAllocationManager mpam = PortAllocationManager .getManager (master );
5266 final PortAllocationManager pam = PortAllocationManager .getManager (cur );
5367 Map <String ,Integer > portMap = new HashMap <String ,Integer >();
5468 final List <Port > allocated = new ArrayList <Port >();
5569
5670 for (PortType pt : ports ) {
57- logger .println ("Allocating TCP port " +pt .name );
71+ boolean global = false ;
72+ try {
73+ Pool pool = PortAllocator .DESCRIPTOR .getPoolByName (pt .name );
74+ global = pool .global ;
75+ } catch (PoolNotDefinedException e ) {
76+ // ignore, global = false
77+ }
78+ logger .println ("Allocating TCP port " +pt .name + (global ? " (global)" : "" ));
5879 int prefPort = prefPortMap .get (pt .name )== null ?0 :prefPortMap .get (pt .name );
59- Port p = pt .allocate (build , pam , prefPort , launcher , listener );
80+ Port p = pt .allocate (build , global ? mpam : pam , prefPort , launcher , listener );
6081 allocated .add (p );
6182 portMap .put (pt .name ,p .get ());
6283 logger .println (" -> Assigned " +p .get ());
0 commit comments