s27840
s27840

Reputation: 487

Jenkinsfile pipeline, return warning but do not fail

Is there a way to not fail with a declarative pipeline step but display a warning instead? At the moment I am circumventing it by adding || exit 0 to the end of the sh command lines so it always exits ok.

Example currently:

sh 'vendor/bin/phpcs --report=checkstyle --report-file=build/checkstyle.xml --standard=phpcs.xml . || exit 0'

I feel there should be a better way of doing this? How can you control the result returned so the user knows with out digging through result logs but with out blocking/failing too?

Thank you

Edit:

So I have got this far to be able to mark it as unstable. In Blue Ocean it just marks every stage as unstable though and you have to go digging through to find it. Am I trying to do the impossible (but feels like I should be able to do it)?

Also it just displays it as 'Shell script' in the heading on Blue Sky now instead of showing the command being run so you don't even know what it's doing with out expanding each of them.

script {
  def RESULT = sh returnStatus: true, script: 'vendor/bin/phpcs --report=checkstyle --report-file=build/checkstyle.xml --standard=phpcs.xml .'
  if ( RESULT != 0 ) {
    currentBuild.result = 'UNSTABLE'
  }
}

Re marking it all yellow/unstable: Just found this which explains that I am not going mad. Several years of discussion and no progress :( https://issues.jenkins-ci.org/browse/JENKINS-39203

Re it just showing 'Shell script' now on Blue Ocean view: I'll go and play some more and see if I'm better with || exit 0 or a script block and using echo to display some useful info.

Upvotes: 11

Views: 15232

Answers (2)

msa
msa

Reputation: 944

FYI: JENKINS-39203 has been resolved in the meantime.

Instead of setting currentBuild.result = 'UNSTABLE' we use the corresponding basic pipeline step unstable, which also takes a message:

unstable("There are Checkstyle issues")

Upvotes: 11

Fidel
Fidel

Reputation: 1037

You can find options for any steps in your jenkins itself under http://jenkins-url/pipeline-syntax/. sh with returnStatus: true can be used to achieve your goal.

sh returnStatus: true, script: 'ls -2' # returnStatus: true, just set $? but not fail the execution

Below pasted the screenshot from pipeline-syntax page: Screenshot from pipeline-syntax page

Upvotes: 3

Related Questions