Matrix configuration with Jenkins pipelines

后端 未结 5 1946
青春惊慌失措
青春惊慌失措 2020-12-24 12:12

The Jenkins Pipeline plugin (aka Workflow) can be extended with other Multibranch plugins to build branches and pull requests automatically.

What would

5条回答
  •  粉色の甜心
    2020-12-24 13:14

    TLDR: Jenkins.io wants you to use nodes for each build.

    Jenkins.io: In pipeline coding contexts, a "node" is a step that does two things, typically by enlisting help from available executors on agents:

    1. Schedules the steps contained within it to run by adding them to the Jenkins build queue (so that as soon as an executor slot is free on a node, the appropriate steps run)

    2. It is a best practice to do all material work, such as building or running shell scripts, within nodes, because node blocks in a stage tell Jenkins that the steps within them are resource-intensive enough to be scheduled, request help from the agent pool, and lock a workspace only as long as they need it.

    Vanilla Jenkins Node blocks within a stage would look like:

    stage 'build' {
        node('java7-build'){ ... }
        node('java8-build'){ ... }
    }
    

    Further extending this notion Cloudbees writes about parallelism and distributed builds with Jenkins. Cloudbees workflow for you might look like:

    stage 'build' {
        parallel 'java7-build':{
          node('mvn-java7'){ ... }
        }, 'java8-build':{
          node('mvn-java8'){ ... }
        }
    }
    

    Your requirements of visualizing the different builds in the pipeline would could be satisfied with either workflow, but I trust the Jenkins documentation for best practice.


    EDIT

    To address the visualization @Stephen would like to see, He's right - it doesn't work! The issue has been raised with Jenkins and is documented here, the resolution of involving the use of 'labelled blocks' is still in progress :-(

    Q: Is there documentation letting pipeline users not to put stages inside of parallel steps?

    A: No, and this is considered to be an incorrect usage if it is done; stages are only valid as top-level constructs in the pipeline, which is why the notion of labelled blocks as a separate construct has come to be ... And by that, I mean remove stages from parallel steps within my pipeline.

    If you try to use a stage in a parallel job, you're going to have a bad time.

    ERROR: The ‘stage’ step must not be used inside a ‘parallel’ block.
    

提交回复
热议问题