117.info
人生若只如初见

Jenkins在Debian上如何实现多任务并行

在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中实现多任务并行,从而提高持续集成的效率和效能。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe5d4AzsNAQVfAVY.html

推荐文章

  • Debian Strings如何更新与维护

    Debian 是一个流行的 Linux 发行版,以其稳定性和安全性著称。要更新和维护 Debian 系统,可以使用以下命令和步骤:
    更新 Debian 系统的命令 使用 apt 命令...

  • Debian中copendir报错怎么办

    在Debian系统中,如果你在使用copirdir命令时遇到错误,可以尝试以下方法来解决问题: 确保你已经安装了coreutils包,因为copirdir是这个包的一部分。你可以使用...

  • Debian LAMP安装步骤详解

    在Debian系统上安装LAMP(Linux, Apache, MySQL, PHP)环境是一个常见的任务,以下是详细的安装步骤:
    一、安装Apache 打开终端。
    更新软件包列表:su...

  • Debian中getconf命令有哪些常用选项

    getconf 命令在 Debian 和其他 Linux 发行版中用于查询系统配置信息。以下是一些常用的 getconf 选项:
    常用选项 -a 显示所有可用的配置变量及其值。 -k ke...

  • ubuntu pgadmin备份恢复

    在Ubuntu系统中,使用pgAdmin进行PostgreSQL数据库的备份与恢复操作是一项基本且重要的任务。以下是详细的步骤:
    备份操作 使用pgAdmin图形界面备份: 打开...

  • ubuntu如何清理缓存提高性能

    在Ubuntu系统中,清理缓存是提高系统性能的一种有效方法。以下是一些常用的清理缓存命令和步骤:
    清理APT缓存 清理旧版本的软件缓存:
    sudo apt-get a...

  • ubuntu进程权限问题怎么处理

    在Ubuntu系统中,处理进程权限问题通常涉及以下几个方面: 查看进程权限: 使用ps命令查看进程的权限信息。例如,要查看PID为1234的进程的权限,可以使用以下命令...

  • centos中aliases与别名冲突怎么办

    在 CentOS 系统中,如果遇到 aliases(别名)与实际命令冲突的问题,可以采取以下方法解决: 查看当前别名设置:
    使用 alias 命令查看当前系统中定义的所有...