Running stages in parallel with Jenkins workflow / pipeline

前端 未结 5 601
渐次进展
渐次进展 2020-12-04 15:46

Please note: the question is based on the old, now called \"scripted\" pipeline format. When using \"declarative pipelines\", parallel blocks

相关标签:
5条回答
  • 2020-12-04 15:55

    I have just tested the following pipeline and it works

    parallel firstBranch: {
        stage ('Starting Test') 
        {
            build job: 'test1', parameters: [string(name: 'Environment', value: "$env.Environment")]
        }
    }, secondBranch: {
        stage ('Starting Test2') 
        {
            build job: 'test2', parameters: [string(name: 'Environment', value: "$env.Environment")]
        }
    }
    

    This Job named 'trigger-test' accepts one parameter named 'Environment'

    Job 'test1' and 'test2' are simple jobs:

    Example for 'test1'

    • One parameter named 'Environment'
    • Pipeline : echo "$env.Environment-TEST1"

    On execution, I am able to see both stages running in the same time

    0 讨论(0)
  • 2020-12-04 15:55

    As @Quartz mentioned, you can do something like

    stage('Tests') {
        parallel(
            'Unit Tests': {
                container('node') {
                    sh("npm test --cat=unit")
                }
            },
            'API Tests': {
                container('node') {
                    sh("npm test --cat=acceptance")
                }
            }
        )
    }
    
    0 讨论(0)
  • 2020-12-04 16:01

    You may not place the deprecated non-block-scoped stage (as in the original question) inside parallel.

    As of JENKINS-26107, stage takes a block argument. You may put parallel inside stage or stage inside parallel or stage inside stage etc. However visualizations of the build are not guaranteed to support all nestings; in particular

    • The built-in Pipeline Steps (a “tree table” listing every step run by the build) shows arbitrary stage nesting.
    • The Pipeline Stage View plugin will currently only display a linear list of stages, in the order they started, regardless of nesting structure.
    • Blue Ocean will display top-level stages, plus parallel branches inside a top-level stage, but currently no more.

    JENKINS-27394, if implemented, would display arbitrarily nested stages.

    0 讨论(0)
  • 2020-12-04 16:02

    I think this has been officially implemented now: https://jenkins.io/blog/2017/09/25/declarative-1/

    0 讨论(0)
  • 2020-12-04 16:07

    that syntax is now deprecated, you will get this error:

    org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
    WorkflowScript: 14: Expected a stage @ line 14, column 9.
           parallel firstTask: {
           ^
    
    WorkflowScript: 14: Stage does not have a name @ line 14, column 9.
           parallel secondTask: {
           ^
    
    2 errors
    

    You should do something like:

    stage("Parallel") {
        steps {
            parallel (
                "firstTask" : {
                    //do some stuff
                },
                "secondTask" : {
                    // Do some other stuff in parallel
                }
            )
        }
    }
    

    Just to add the use of node here, to distribute jobs across multiple build servers/ VMs:

    pipeline {
      stages {
        stage("Work 1"){
         steps{
          parallel ( "Build common Library":   
                {
                  node('<Label>'){
                      /// your stuff
                      }
                },
    
            "Build Utilities" : {
                node('<Label>'){
                   /// your stuff
                  }
               }
             )
        }
    }
    

    All VMs should be labelled as to use as a pool.

    0 讨论(0)
提交回复
热议问题