在詹金斯管道中运行并行kubernetes作业

时间:2020-07-31 11:39:39

标签: jenkins kubernetes jenkins-pipeline

我正在Jenkins上进行性能测试。测试可能包括同一容器的多个实例以生成必要的负载。我无法对实例数进行硬编码,因为它会因测试参数而异。 我尝试使用以下代码:

pipeline {
agent any
stages {
  stage('Running Jmeter') {
    agent {
      kubernetes {
          label "jmeter_tests_executor"
          yaml '''
          apiVersion: batch/v1
          kind: Job
          metadata:
            name: jmeter
            namespace: jenkins
          spec:
            parallelism: 2 
            backoffLimit: 1 
            ttlSecondsAfterFinished: 100
          ...

但是它不起作用。它挂在pod调度上(如果直接在没有Jenkins的kubernetes集群上应用此清单,则工作正常)。
如果有人有经验,请分享您的解决方法或想法,以实现该想法。

1 个答案:

答案 0 :(得分:0)

也许尝试这样的事情

stage("RUN LOAD TEST") {
    steps {
        script {
            //params.each creates an array of stages
            paramsToTest.each {param -> 
                load["load test"] = {
                    stage("Executing run ${param}") {
                        agent {
                            kubernetes {
                                label "jmeter_tests_executor"
                                yaml '''
                                apiVersion: batch/v1
                                kind: Job
                                metadata:
                                name: jmeter
                                namespace: jenkins
                                spec:
                                parallelism: 2 
                                backoffLimit: 1 
                                ttlSecondsAfterFinished: 100
                                ...
                                '''
                            }    
                        }
                        steps {
                            <EXECUTE LOAD TEST COMMAND>
                        }
                    }
                }
                parallel(load) //actually executes the parallel stages
            }
        }
    }
}

这是使用一个事物数组,然后基于该数组生成阶段。阶段中的agent参数应该告诉Jenkins每次执行并行创建一个新的pod。