Jenkins - Pipeline 遍歷生成多個stage塊 && pipeline 遍歷並行執行多個Job

def actionTest = null
loadList = ["beijing",  "chengdu","xxx","shanghai"," xxx","xxx","11.11.11.111","99.88.88.88"] //這裏要定義要自動生成的機器label(該label是jenkins節點機的label名稱)
actionTest = loadList.collectEntries {
    ["壓測 ${it}": load_test(it)] //這裏${it}我沒搞懂(可能相似於一個遍歷循環),反正按着這個來就ok,而後把it傳入到方法中,而後在方法中把ip傳入node
}

def load_test(nodeIp) {
    return {
        node(nodeIp) {
            dir('/data/soft/jenkins_node_release/workspace/testfiles/libs') {
                //sh "mvn install:install-file -Dfile=jmeter-plugins-dubbo-1.3.8-jar-with-dependencies.jar -DgroupId=io.github.ningyu -DartifactId=jmeter-plugins-dubbo -Dversion=1.3.8 -Dpackaging=jar"
                //sh "mvn install:install-file -Dfile=mysql-connector-java-5.1.47-bin.jar -DgroupId=mysql -DartifactId=mysql-connector-java -Dversion=5.1.47 -Dpackaging=jar"
                sh "mvn install:install-file -Dfile=com.belle.test.jmeterUtil.jar -DgroupId=com.belle.test -DartifactId=jmeterUtil -Dversion=1.0.0 -Dpackaging=jar"
                //sh "mvn install:install-file -Dfile=ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar"
                //sh "mvn install:install-file -Dfile=jmeter-plugins-random-csv-data-set-0.6.jar -DgroupId=com.blazemeter -DartifactId=jmeter-plugins-random-csv-data-set -Dversion=0.6 -Dpackaging=jar"
            }
            dir("${workspace}") {
                sh "pwd"
                print("開始執行測試...")
                sh "mvn clean verify -Djmx.filesDirectory.dir=${filesDirectory}  -Dargs.filesDirectory.dir=${filesDirectory}   -Djmeter.threadCount=${threadCount}    -Djmeter.duration=${duration} -Djmeter.loopCount=${loopCount}   -PLoad"
                echo '壓測腳本執行完成'
            }
        }
    }
}

pipeline {
    agent {
        node {
            label 'master'
        }
    }
    options {
        timeout(time: 60, unit: 'MINUTES')
        ansiColor('xterm')
        disableConcurrentBuilds()
    }
    //此處便可開始進行代碼部署操做
    stages {
        stage("執行測試") {
            steps {
                script {
                    //
                    parallel actionTest //調用入口
                }
            }
        }
    }
}

 

**************************************分割線**************************************java

**************************************分割線**************************************node

**************************************分割線**************************************mysql

package com.belle.log.yougou.pipelineV5.mingcai

def actionTest = null
//def threadTest = null
def job_list = ["1_query_userinfo", "2_query_preview", "3_query_homepage", "4_query_organ"]  //這裏傳入要執行job的名稱
//def threadCount_list = ["10", "11", "12", "13"]

actionTest = job_list.collectEntries {
    ["Job: ${it}": load_test(it)] //這裏${it}我沒搞懂(可能相似於一個遍歷循環),反正按着這個來就ok,而後把it傳入到方法中,而後在方法中把ip傳入node
}

def load_test(job_name) {
    return {
        build job: job_name, parameters: [string(name: 'test1', value: 'hello,'), string(name: 'test2', value: 'world')] //重點在這,build job是執行多個job的核心
    }
}

pipeline {
    agent {
        node {
            label 'master'
        }
    }

    options {
        timeout(time: 720, unit: 'MINUTES')
    }

    stages {
        stage("並行執行Job") {
            steps {
                script {
                    dir("${workspace}"){
                        sh "pwd"
                        sh "mvn clean verify  -PLoad"
                        println("cookies信息生成完畢...")
                    }
                    parallel actionTest  //1.這裏聲明並行執行
                }
            }
        }
    }

}

相關文章
相關標籤/搜索