2016-08-04 17 views
3

ビルド結果をテストするための一連の仮想マシンがあります。すべてのVMはJenkinsスレーブノードとして設定されます。マスターノードは、VMの起動と停止を行うことができます。Jenkinsパイプラインスクリプトのラベルからノード名を取得する方法

のVMは、三(cluster1cluster2)のグループで、及び異なる役割(role1role2role3)でタグ付けされています。

私はその引数(StringParameterValue)としてGROUP名を取りパイプラインのスクリプトを記述したいと思いますし、

    は、各ノード上のグループに属する仮想マシン
  1. 実行個々のテストを開始し
  2. (中並列)
  3. 完了後にVMを停止します。

    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; 
    } 
    

    Q:私はグループラベルによって個々のノード名を導き出すことができますどのよう

パイプラインのスクリプトはおおよそのように見えますか?

答えて

3

私はそのラベルからノード名をフェッチ機能を実装: `から来lcluster`ん

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

を? –

+0

Uups - 実際はタイプミスです。 'lgroup'でなければなりません。 –

関連する問題