I'm having some trouble to manipulate the build result of a Jenkins pipeline. I've narrowed it down to the following issue: anyone know why the following Jenkins pipeline doesn't make the build result SUCCESS? Instead the build fails.
print "Setting result to FAILURE"
currentBuild.result = 'FAILURE'
print "Setting result to SUCCESS"
currentBuild.result = 'SUCCESS'
To retry a Jenkins job, you can use the Naginator plugin. Simply install the plugin, and then check the Post-Build action "Retry build after failure" on your project's configuration page. If the build fails, it will be rescheduled to run again after the time you specified.
Select a job that triggers a remote one and then go to Job Configuration > Build section > Add Build Step > Trigger builds on remote/local projects option. This configuration allows you to trigger another exciting job on a different CM (remote). The downstream job name part will autocomplete.
-The if statement simply does the following: if I get the expected exit code, exit with 0 so that the build is marked as SUCCESS , else exit with 1 so that the build is marked as FAILURE . Note there is no need to call 'bash', as you are already in a shell.
To ignore a failed step in declarative pipeline you basically have two options: Use script step and try-catch block (similar to previous proposition by R_K but in declarative style)
I guess this is by design, "result can only get worse" in setResult():
// result can only get worse
if (result==null || r.isWorseThan(result)) {
result = r;
LOGGER.log(FINE, this + " in " + getRootDir() + ": result is set to " + r, LOGGER.isLoggable(Level.FINER) ? new Exception() : null);
}
That's a bummer
For simplier answer, just get raw build, and set field directly:
currentBuild.rawBuild.@result = hudson.model.Result.SUCCESS
That's works and can be executed from another job!
import com.cloudbees.groovy.cps.NonCPS
import jenkins.model.*
import hudson.model.Result
@NonCPS
def getProject(projectName) {
// CloudBees folder plugin is supported, you can use natural paths:
// in a postbuild action use `manager.hudson`
// in the script web console use `Jenkins.instance`
def project = jenkins.model.Jenkins.instance.getItemByFullName(projectName)
if (!project) {error("Project not found: $projectName")}
return project
}
project = getProject('foo/bar')
build = project.getBuildByNumber(2443)
// build = project.getBuild(project, '2443')
build.@result = hudson.model.Result.SUCCESS
// build.@result = hudson.model.Result.NOT_BUILT
// build.@result = hudson.model.Result.UNSTABLE
// build.@result = hudson.model.Result.FAILURE
// build.@result = hudson.model.Result.ABORTED
I resolved this by using this
currentBuild.result = hudson.model.Result.FAILURE.toString()
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