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) ...
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..." }
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.
Yes you can only if you want to have external function inside step block.
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 :(" } } } }
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!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With