溫馨提示×

Jenkins在Debian上如何實現多任務并行

小樊
88
2025-03-25 02:14:27
欄目: 智能運維

在Jenkins中實現多任務并行可以通過兩種方式實現:在stage級別并行執行和在job級別并行執行。以下是具體的實現方法:

在Stage級別并行執行

在Jenkins Pipeline中,可以通過使用parallel關鍵字來實現stage級別的并行執行。以下是一個示例代碼,展示了如何在同一個job中并行執行多個不同的stages:

pipeline {
    agent {
        label "${params.AGENT_LABEL ?: ''}"
    }
    parameters {
        // 定義參數
        string(name: 'PARAM_1', defaultValue: '', description: '')
        string(name: 'PARAM_2', defaultValue: '', description: '')
        // ...
        string(name: 'TEST_BRANCH', defaultValue: 'develop', description: '測試代碼分支')
        string(name: 'AGENT_LABEL', defaultValue: 'build-arm64', description: '選擇運行環境的Jenkins節點標簽', trim: true)
    }
    stages {
        stage('Checkout Script') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: "*/${params.TEST_BRANCH}"]], doGenerateSubmoduleConfigurations: false, submoduleCfg: [], userRemoteConfigs: [[credentialsId: scm.userRemoteConfigs[0].credentialsId, url: 'code repo from github']]])
                script {
                    // 聲明測試結果文件夾
                    TEST_RESULT_PATH = 'test/reports'
                    sh "sudo rm -rf ${TEST_RESULT_PATH}"
                    sh "mkdir -p ${TEST_RESULT_PATH}"
                    // 可以準備一些其他的前提條件
                }
            }
        }
        stage('Test in Parallel') {
            parallel {
                stage('Group AAA Test') {
                    steps {
                        script {
                            dir('aaa') {
                                // 運行測試組 'aaa'
                            }
                        }
                    }
                }
                stage('Group BBB Test') {
                    steps {
                        script {
                            dir('bbb') {
                                // 運行測試組 'bbb'
                            }
                        }
                    }
                }
                stage('Group CCC Test') {
                    steps {
                        script {
                            dir('ccc') {
                                // 運行測試組 'ccc'
                            }
                        }
                    }
                }
            }
        }
    }
    post {
        always {
            script {
                System.setProperty('hudson.model.DirectoryBrowserSupport.CSP', '')
                publishHTML([allowMissing: false, alwaysLinkToLastBuild: false, keepAll: true, reportDir: TEST_RESULT_PATH])
            }
        }
    }
}

在Job級別并行執行

在job級別并行執行,可以通過創建一個master job來調度多個子jobs,這些子jobs可以并行執行不同的任務。以下是一個示例代碼,展示了如何在job級別實現并行執行:

pipeline {
    agent {
        label "${params.AGENT_LABEL ?: ''}"
    }
    parameters {
        // 定義參數
        string(name: 'PARAM_1', defaultValue: '', description: '')
        string(name: 'PARAM_2', defaultValue: '', description: '')
        // ...
        string(name: 'TEST_BRANCH', defaultValue: 'develop', description: '測試代碼分支')
        string(name: 'TEST_ENVS', defaultValue: 'chrome,safari,firefox', description: '測試環境')
        string(name: 'AGENT_LABEL', defaultValue: 'build-arm64', description: '選擇運行環境的Jenkins節點標簽', trim: true)
    }
    stages {
        stage('Checkout Script') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: "*/${params.TEST_BRANCH}"]], doGenerateSubmoduleConfigurations: false, submoduleCfg: [], userRemoteConfigs: [[credentialsId: scm.userRemoteConfigs[0].credentialsId, url: 'code repo from github']]])
                script {
                    // 聲明測試結果文件夾
                    TEST_ENVIRONMENTS = params.TEST_BRANCH.split(',')
                    // 可以準備一些其他的前提條件
                }
            }
        }
        stage('Test in Parallel') {
            steps {
                def jobs = [:]
                for (env in TEST_ENVIRONMENTS) {
                    jobs[env] = build(job: 'run_test_cases', parameters: [string(name: 'TEST_ENV', value: env), string(name: 'AGENT_LABEL', value: params.AGENT_LABEL)], propagate: false)
                }
                parallel jobs
            }
        }
    }
}

在這個示例中,master job會根據參數TEST_ENVS的值,調度多個子job run_test_cases同時執行,每個子job會根據master job傳給它的不同參數在不同的環境中運行測試。

通過以上兩種方式,可以在Jenkins中實現多任務并行,從而提高持續集成的效率和效能。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女