Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-28119

Link to log of failed step

    XMLWordPrintable

Details

    Description

      When a flow involves many steps, long logs, and/or many branches, it can be hard for a developer receiving a failure email (for example) to quickly see what part of the build actually failed and why. I think it would be useful for the catchError step to do a DFS search on the Throwable and its cause chain through the FlowNode graph starting at the end of the catch step, looking for ErrorAction, and setting/appending an environment variable with the URL of the LogAction. Or provide a new step to do the same. Thus you could write

      def runStuff(param) {
        ...
      }
      try {
        parallel a: {runStuff 'a'}, b: {runStuff 'b'}
      } catch (e) {
        mail to: '...', subject: 'Failure!', body: "Build failed: ${errorUrl(e)}"
      }
      

      and get a link to http://jenkins/job/myflow/123/flowGraph/77/console or the like, according to the actual step in one of the branches that threw the error.

      Attachments

        Issue Links

          Activity

            erikvv Erik van Velzen added a comment - - edited

            Gonna be  harsh here, but rightfully so. I feel burned, I worked many days to set up docker containers, scripts and even fixing and compiling plugins, and I now find out that it's for naught.

            "run a command and produce a URL to the output" is basic functionality of a CI tool.

            There's no point in using Jenkins without it (for me).

            erikvv Erik van Velzen added a comment - - edited Gonna be  harsh here, but rightfully so. I feel burned, I worked many days to set up docker containers, scripts and even fixing and compiling plugins, and I now find out that it's for naught. "run a command and produce a URL to the output" is basic functionality of a CI tool. There's no point in using Jenkins without it (for me).

            Perhaps a workaround would be to pipe the output within the step to a file and publish it as an artifact.

            erikvv Erik van Velzen added a comment - Perhaps a workaround would be to pipe the output within the step to a file and publish it as an artifact.
            thangbn thang bui added a comment - - edited

            erikvv if you are using blue ocean, you can just have the link to the build and once the page open it will automatically scroll to the failed step.

            also another work around https://stackoverflow.com/questions/53444196/get-log-for-each-jenkins-pipeline-stage 

            thangbn thang bui added a comment - - edited erikvv if you are using blue ocean, you can just have the link to the build and once the page open it will automatically scroll to the failed step. also another work around  https://stackoverflow.com/questions/53444196/get-log-for-each-jenkins-pipeline-stage  
            gl1koz3 Edgars Batna added a comment -

            +1 The advent of Blue Ocean came and went. Jenkins is still a powerful tool, but I feel weird seeing many functional improvements get so stale.

            gl1koz3 Edgars Batna added a comment - +1 The advent of Blue Ocean came and went. Jenkins is still a powerful tool, but I feel weird seeing many functional improvements get so stale.
            heldermagalhaes Helder Magalhães added a comment - - edited

            Late in the game, but this is still not straightforward as it could be.

            Is there already any way to get the link to 'blue/rest/organizations/jenkins/pipelines/<jobname>/runs/<build-id>/nodes/<PipelineNodeImpl-id>/log/ from within a pipeline parallel node?

            Apparently it's possible but, unfortunately, not out-of-the-box:

            Seems that getting the link (out-of-the-box) is now closer with the RUN_DISPLAY_URL environment variable injected by the BlueOcean plugin but it would be very nice to have an environment variable set to the step ID available throughout the whole job (possibly as part of the pipeline plug-in?). Not only for linking but also for obtaining a unique identifier which maps to something and can be used for (temporary?) storage path, artifact filenames, for better diagnostic output, etc.

            Edit: correct link for "building a link"; added some arguments.

            heldermagalhaes Helder Magalhães added a comment - - edited Late in the game, but this is still not straightforward as it could be. Is there already any way to get the link to 'blue/rest/organizations/jenkins/pipelines/<jobname>/runs/<build-id>/nodes/<PipelineNodeImpl-id>/log/ from within a pipeline parallel node? Apparently it's possible but, unfortunately, not out-of-the-box: For getting the Pipeline implementation node ID, take a look at Unexpected exception when use getContext and sh together in the latest version of Jenkins . The example even works from non-library code! For building a link , check out Jenkins: Generating Blue Ocean URLs . The example even offers to choose between legacy or BlueOcean! Seems that getting the link (out-of-the-box) is now closer with the RUN_DISPLAY_URL environment variable injected by the BlueOcean plugin but it would be very nice to have an environment variable set to the step ID available throughout the whole job (possibly as part of the pipeline plug-in?). Not only for linking but also for obtaining a unique identifier which maps to something and can be used for (temporary?) storage path, artifact filenames, for better diagnostic output, etc. Edit : correct link for "building a link"; added some arguments.

            People

              jglick Jesse Glick
              jglick Jesse Glick
              Votes:
              49 Vote for this issue
              Watchers:
              65 Start watching this issue

              Dates

                Created:
                Updated: