Can I use a Closure to define a stage in a Jenkins Declarative Pipeline?

Will Brode

I'm trying to do something like this:

def makeStage = {
  stage('a') {
    steps {
      echo 'Hello World'
    }
  }
} 
pipeline {
  agent none
  stages {
    makeStage()
  }
}

But it gives me this exception:

WorkflowScript: 11: Expected a stage @ line 11, column 5.
   makeStage()
   ^

Is it possible to define a stage as a external closure and if so - how?

Szymon Stepniak

You can't define stages outside the declarative pipeline. The main purpose of declarative pipeline is to provide simplified and opinionated syntax so you can focus on what should be done (by using some of the available steps) and not how to do it.

If you are interested in more flexible way of implementing pipeline, you may choose Scripted Pipeline approach which is not that strict if it comes to the syntax - it's only limited by Groovy and CPS execution module.

Working (scripted) pipeline from your example would look like this:

#!groovy

def makeStage = {
  stage('a') {
    echo 'Hello World'
  }
} 

node {
    makeStage()
}

Attention: There is no steps method inside stage in a scripted pipeline. If you leave it there you will get

java.lang.NoSuchMethodError: No such DSL method 'steps' found among 
    steps [archive, bat, build, catchError, checkout, deleteDir, dir, 
    dockerFingerprintFrom, ...

Scripts in declarative pipeline

Declarative pipeline defines a script step that allows you to put a block of scripted pipeline. However it still does not allow you to define stage dynamically or/and extract stage definition to a function or closure. script step gets executed inside the stage so you can't control inside this block if stage is executed or not. In some cases however this step might be very useful if you want to do something more complex than just calling pre-defined step of a declarative pipeline.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

How can I use Jar produced by mvn package in another Jenkins declarative pipeline stage?

Can I define multiple agent labels in a declarative Jenkins Pipeline?

How to use parameter to skip a stage of Jenkins declarative pipeline?

Can I wrap a whole stage of a declarative pipeline as groovy library function?

Jenkins: Unknown stage section "matrix" in declarative pipeline

Determine Failed Stage in Jenkins Declarative Pipeline

Jenkins declarative pipeline send email at every stage

Jenkins Declarative Pipeline Non Critical Path Stage

How can I use different private docker agents based on parameter in Jenkins declarative pipeline?

How can I tag a project in git from a jenkins declarative pipeline

In a declarative jenkins pipeline - can I set the agent label dynamically?

Is it possible to pause a stage until a time is reached in a Jenkins declarative pipeline?

Jenkins Multibranch job with declarative pipeline cloning repo for every stage

Jenkins declarative pipeline get environment variable at post stage

Creating a sequential step in a jenkins declarative pipeline preceding a parallel stage

How to detect which parallel stage failed in a Jenkins declarative pipeline?

How to make parallel calls to the same function in stage in Jenkins Declarative Pipeline

Jenkins: Cannot define variable in pipeline stage

Can I get the status of a previous stage build in Jenkins pipeline?

Jenkins: How to use choice parameter in declarative pipeline?

Jenkins declarative pipeline. Stage post action goes to failure block if previous stage failed and current stage is successful

Use a lightweight executor for a declarative pipeline stage (agent none)

How can I use `def` in jenkins pipeline

Trigger an action within Jenkins declarative pipeline right after a stage ends or just before a stage begins?

How do I use Docker's --cache-from build flag in a declarative Jenkins pipeline?

Jenkins parallel declarative pipeline

Jenkins input on declarative pipeline

Jenkins declarative pipeline: What workspace is associated with a stage when the agent is set only for the pipeline?

Jenkins scripted pipeline or declarative pipeline

TOP Ranking

  1. 1

    Failed to listen on localhost:8000 (reason: Cannot assign requested address)

  2. 2

    How to import an asset in swift using Bundle.main.path() in a react-native native module

  3. 3

    Loopback Error: connect ECONNREFUSED 127.0.0.1:3306 (MAMP)

  4. 4

    pump.io port in URL

  5. 5

    Spring Boot JPA PostgreSQL Web App - Internal Authentication Error

  6. 6

    BigQuery - concatenate ignoring NULL

  7. 7

    ngClass error (Can't bind ngClass since it isn't a known property of div) in Angular 11.0.3

  8. 8

    Do Idle Snowflake Connections Use Cloud Services Credits?

  9. 9

    maven-jaxb2-plugin cannot generate classes due to two declarations cause a collision in ObjectFactory class

  10. 10

    Compiler error CS0246 (type or namespace not found) on using Ninject in ASP.NET vNext

  11. 11

    Can't pre-populate phone number and message body in SMS link on iPhones when SMS app is not running in the background

  12. 12

    Generate random UUIDv4 with Elm

  13. 13

    Jquery different data trapped from direct mousedown event and simulation via $(this).trigger('mousedown');

  14. 14

    Is it possible to Redo commits removed by GitHub Desktop's Undo on a Mac?

  15. 15

    flutter: dropdown item programmatically unselect problem

  16. 16

    Change dd-mm-yyyy date format of dataframe date column to yyyy-mm-dd

  17. 17

    EXCEL: Find sum of values in one column with criteria from other column

  18. 18

    Pandas - check if dataframe has negative value in any column

  19. 19

    How to use merge windows unallocated space into Ubuntu using GParted?

  20. 20

    Make a B+ Tree concurrent thread safe

  21. 21

    ggplotly no applicable method for 'plotly_build' applied to an object of class "NULL" if statements

HotTag

Archive