44import hudson .Extension ;
55import hudson .FilePath ;
66import hudson .Launcher ;
7- import hudson .model .*;
7+ import hudson .model .BuildListener ;
8+ import hudson .model .AbstractBuild ;
9+ import hudson .model .Computer ;
10+ import hudson .model .Descriptor ;
11+ import hudson .model .Executor ;
812import hudson .tasks .BuildWrapper ;
913import jenkins .tasks .SimpleBuildWrapper ;
1014import hudson .util .FormValidation ;
15+
16+ import java .io .IOException ;
17+ import java .io .PrintStream ;
18+ import java .util .ArrayList ;
19+ import java .util .HashMap ;
20+ import java .util .HashSet ;
21+ import java .util .List ;
22+ import java .util .Map ;
23+ import java .util .regex .Pattern ;
24+
25+ import jenkins .model .Jenkins ;
26+ import jenkins .model .Jenkins .MasterComputer ;
1127import net .sf .json .JSONObject ;
28+
1229import org .apache .commons .logging .Log ;
1330import org .apache .commons .logging .LogFactory ;
1431import org .jenkinsci .Symbol ;
1936
2037import com .google .common .collect .Lists ;
2138
22- import java .io .IOException ;
23- import java .io .PrintStream ;
24- import java .util .*;
25- import java .util .regex .Pattern ;
26-
2739/**
2840 * Allocates TCP Ports on a Computer for consumption and sets it as
2941 * environment variables, see configuration
@@ -54,7 +66,7 @@ private PortAllocator(PortType[] ports) {
5466
5567 @ DataBoundConstructor
5668 public PortAllocator () {
57- // empty
69+ // empty
5870 }
5971
6072 @ DataBoundSetter
@@ -102,6 +114,7 @@ public String[] getPlainports() {
102114 public void setUp (Context context , Run <?, ?> run , FilePath workspace , Launcher launcher , TaskListener taskListener , EnvVars envVars ) throws IOException , InterruptedException {
103115 PrintStream logger = taskListener .getLogger ();
104116
117+ Computer master = Jenkins .getInstance ().toComputer ();
105118 Computer cur = workspace .toComputer ();
106119 Map <String ,Integer > prefPortMap = new HashMap <String ,Integer >();
107120 Run <?, ?> prevBuild = run .getPreviousBuild ();
@@ -112,14 +125,22 @@ public void setUp(Context context, Run<?, ?> run, FilePath workspace, Launcher l
112125 prefPortMap = prevAlloc .getPreviousAllocatedPorts ();
113126 }
114127 }
128+ final PortAllocationManager mpam = PortAllocationManager .getManager (master );
115129 final PortAllocationManager pam = PortAllocationManager .getManager (cur );
116130 Map <String ,Integer > portMap = new HashMap <String ,Integer >();
117131 final List <Port > allocated = new ArrayList <Port >();
118132
119133 for (PortType pt : ports ) {
120- logger .println ("Allocating TCP port " +pt .name );
134+ boolean global = false ;
135+ try {
136+ Pool pool = PortAllocator .DESCRIPTOR .getPoolByName (pt .name );
137+ global = pool .global ;
138+ } catch (PoolNotDefinedException e ) {
139+ // ignore, global = false
140+ }
141+ logger .println ("Allocating TCP port " +pt .name + (global ? " (global)" : "" ));
121142 int prefPort = prefPortMap .get (pt .name )== null ?0 :prefPortMap .get (pt .name );
122- Port p = pt .allocate (run , pam , prefPort , launcher , taskListener );
143+ Port p = pt .allocate (run , global ? mpam : pam , prefPort , launcher , taskListener );
123144 allocated .add (p );
124145 portMap .put (pt .name , p .get ());
125146 logger .println (" -> Assigned " +p .get ());
0 commit comments