2016-08-04 2 views
3

Ich habe eine Reihe von virtuellen Maschinen zum Testen meiner Build-Ergebnisse. Alle VMs sind als Jenkins-Slave-Knoten konfiguriert. Der Master-Knoten kann die VMs starten und stoppen.So erhalten Sie Knotennamen aus Beschriftungen in einem Jenkins-Pipeline-Skript

Die VMs werden in Gruppen von drei (cluster1, cluster2) markiert und mit unterschiedlichen Rollen (role1, role2, role3).

Ich möchte ein Pipeline-Skript schreiben, die einen Gruppennamen als Argument (StringParameterValue) und

  1. die VMs starten, die
  2. Lauf Einzeltests auf jedem Knoten zu der Gruppe gehören (in parallel)
  3. stoppen Sie die VMs nach Abschluss.

Die Pipeline Skript sieht etwa wie:

def VM1 = ??? get name of the node labeled ("GROUP && role1") ???; 
def VM2 = ??? get name of the node labeled ("GROUP && role2") ???; 
def VM3 = ??? get name of the node labeled ("GROUP && role3") ???; 
def VMs = [VM1, VM2, VM3]; 

node (master) { 

    stage 'Start' 
    def start = [:]; 
    for (vm in VMs) { 
     start["${vm}"] = { 
      build job: 'Start_VM', parameters: [ 
       [$class: 'StringParameterValue', name: 'VMNAME', value: vm]]; 
     } 
    } 
    parallel start; 

    def tests = [:]; 
    for (int i = 0; i < VMs.size; i++) { 
     tests["role${i}"] = { 
      node (VMs[i]) { 
       build job: "Test_role${i}"; 
      } 
     } 
    } 
    parallel tests; 

    Stage 'Stop' 
    def stop = [:]; 
    for (vm in VMs) { 
     stop["${vm}"] = { 
      build job: 'Stop_VM', parameters: [ 
       [$class: 'StringParameterValue', name: 'VMNAME', value: vm]]; 
     } 
    } 
    parallel stop; 
} 

F: Wie kann ich die einzelnen Knotennamen durch die Gruppenbezeichnung ableiten?

Antwort

3

ich implementiert eine Funktion, die die Knotennamen von ihren Etiketten holt:

def roles = ['role1', 'role2', 'role3']; 

def getNodeNames (group, roles) { 
    def lgroup = Jenkins.instance.getLabel(group) 
    def result = [:] 

    for (role in roles) { 
     def lrole = lgroup.and(Jenkins.instance.getLabel(role)) 
     def nodes = lrole.getNodes() 
     if (nodes.size() > 0) { 
      result[role] = nodes[0].getNodeName() 
     } 
    } 
    print "getNodeNames($group) = ${result}" 
    return result 
} 

def VMs = getNodeNames(GROUP) 
+0

Wo 'lcluster' kommen aus? –

+0

Uups - es ist eigentlich ein Tippfehler. Sollte 'Lgroup' sein. –

Verwandte Themen