Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to fix Pipeline-Script "Expected a step" error

I am trying to run a simple pipeline-script in Jenkins with 2 stages. The script itself creates a textFile and checks if this one exists. But when i try to run the job I get an "Expected a step" error.

I have read somewhere that you cant have an if inside a step so that might be the problem but if so how can I check without using the if?

pipeline {     agent {label 'Test'}     stages {         stage('Write') {             steps {                 writeFile file: 'NewFile.txt', text:                  '''Sample HEADLINE'''                 println "New File created..."             }         }         stage('Check') {             steps {                         Boolean bool = fileExists 'NewFile.txt'                 if(bool) {                     println "The File exists :)"                 }                 else {                     println "The File does not exist :("                 }                         }         }     } } 

I expect the script to create a "NewFile.txt" in the agents workspace and print a text to the console confirming that it exists.

But I actually get two "Expected a step" errors. At the Line starting with Boolean bool = ... and at if(bool) ...

like image 850
Saturas Avatar asked Apr 04 '19 06:04

Saturas


People also ask

How do you throw an error in Jenkins pipeline?

If you want to abort your program on exception, you can use pipeline step error to stop the pipeline execution with an error. Example : try { // Some pipeline code } catch(Exception e) { // Do something with the exception error "Program failed, please read logs..." }

Where do you find errors in Jenkins?

In Jenkins, in the pipeline where failure occurred, in the pane, select the latest build, and click Console Output. On the Console Output page, check the logs to find the reason for the failure.

Can I mix declarative and scripted pipeline?

Yes you can only if you want to have external function inside step block.


2 Answers

You are missing a script{} -step which is required in a declarative pipeline.

Quote:

The script step takes a block of Scripted Pipeline and executes that in the Declarative Pipeline.

stage('Check') {     steps {                 script {             Boolean bool = fileExists 'NewFile.txt'             if (bool) {                 println "The File exists :)"             } else {                 println "The File does not exist :("             }            }              } } 
like image 150
Michael Kemmerzell Avatar answered Sep 18 '22 16:09

Michael Kemmerzell


There are multiple reasons why you may get the "Expected a step" error.

Mine occurred because I used single quotes ' to surround a step script instead of double quotes ". For example:

stage("Build") {     steps {         sh "./build.sh ${SECRET_KEY}"     } } 

The string used above uses string interpolation (or I guess it's called a "templateable string"?), which won't work for a single-quoted string.

Thought I'd add this answer here in case someone comes from Google and the accepted answer doesn't work!

like image 36
ToastyMallows Avatar answered Sep 18 '22 16:09

ToastyMallows