How to run multiple stages on the same node with declarative Jenkins pipeline?

后端 未结 4 622
失恋的感觉
失恋的感觉 2021-01-31 02:54

Goal
Run multiple stages of a declarative Jenkins pipeline on the same node.

Setup
This is just a minimal example to show the p

相关标签:
4条回答
  • 2021-01-31 02:55

    replace agent none with agent any

    0 讨论(0)
  • 2021-01-31 02:59

    You could define stages inside a script block. Those stages are kind of sub-stages of a parent stage running in a given agent. That was the approach that I had to use in a similar use case than yours.

    #!groovy
    
    windowsNode = 'windows'
    
    pipeline {
      agent none
      stages {
        stage('Stage A') {
          agent {
            label windowsNode
          }
          steps {
            script {
    
              stage('Stage 1') {        
                windowsNode = NODE_NAME
                echo "windowsNode: $windowsNode, NODE_NAME: $NODE_NAME"
              }
    
              stage('Stage 2') {
                echo "windowsNode: $windowsNode, NODE_NAME: $NODE_NAME"
              }
            }
          }
        }
      }
    }
    
    0 讨论(0)
  • 2021-01-31 03:10

    Since version 1.3 of Declarative Pipeline plugin, this is officially supported. It's officially called "Sequential Stages".

    pipeline {
        agent none
    
        stages {
            stage("check code style") {
                agent {
                    docker "code-style-check-image"
                }
                steps {
                    sh "./check-code-style.sh"
                }
            }
    
            stage("build and test the project") {
                agent {
                    docker "build-tools-image"
                }
                stages {
                   stage("build") {
                       steps {
                           sh "./build.sh"
                       }
                   }
                   stage("test") {
                       steps {
                           sh "./test.sh"
                       }
                   }
                }
            }
        }
    }
    

    Official announcement here: https://jenkins.io/blog/2018/07/02/whats-new-declarative-piepline-13x-sequential-stages/

    0 讨论(0)
  • 2021-01-31 03:22

    I have found that this works as you would expect

    #!groovy
    
    windowsNode = 'windows'
    
    pipeline {
        agent none
        stages {
            stage('Stage 1') {
                steps {
                    node(windowsNode) {
                        script {
                            // all subsequent steps should be run on the same windows node
                            windowsNode = NODE_NAME
                        }
                        echo "windowsNode: $windowsNode, NODE_NAME: $NODE_NAME"
                    }
                }
            }
            stage('Stage 2') {
                steps {
                    node(windowsNode) {
                        echo "windowsNode: $windowsNode, NODE_NAME: $NODE_NAME"
                    }
                }
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题