Skip to content

Jenkins

Jenkins console logs mix plugin chatter, shell traces (+ ...), and tool output into one stream. The recipes below run inside a sh step on any Linux agent with npx available.

Declarative pipeline

pipeline {
  agent any

  stages {
    stage('Test') {
      steps {
        sh 'npm test > raw_logs.txt 2>&1 || true'
      }
    }

    stage('Compress logs') {
      steps {
        sh '''
          npx -y logstrip raw_logs.txt -o clean.log --stats
        '''
      }
    }
  }

  post {
    always {
      archiveArtifacts artifacts: 'clean.log', fingerprint: true
    }
  }
}

Scripted pipeline with failure-only compression

node('linux') {
  try {
    stage('Test') {
      sh 'npm test > raw_logs.txt 2>&1'
    }
  } catch (err) {
    stage('Compress logs for triage') {
      sh '''
        npx -y logstrip raw_logs.txt \
          -o clean.log \
          --json > stats.json
      '''
      archiveArtifacts artifacts: 'clean.log,stats.json'
    }
    throw err
  }
}

Capture the Jenkins console log itself

If you want to compress the full console output (not just your test step), fetch it from Jenkins via the REST API in a post-build step:

post {
  always {
    sh """
      curl -s -u "\$JENKINS_USER:\$JENKINS_TOKEN" \\
        "\$BUILD_URL/consoleText" > console.log

      npx -y logstrip console.log -o clean.log --stats
    """
    archiveArtifacts artifacts: 'clean.log'
  }
}

Configure JENKINS_USER and JENKINS_TOKEN as credentials in Jenkins, not as plain environment variables.

Multi-branch pipeline with per-branch compression

pipeline {
  agent any

  stages {
    stage('Build & Test') {
      steps {
        sh "make test > raw-${env.BRANCH_NAME}.log 2>&1 || true"
        sh """
          npx -y logstrip raw-${env.BRANCH_NAME}.log \
            -o clean-${env.BRANCH_NAME}.log \
            --stats
        """
      }
    }
  }

  post {
    always {
      archiveArtifacts artifacts: "clean-${env.BRANCH_NAME}.log"
    }
  }
}

Send compact logs to an AI agent

stage('Triage') {
  when { expression { currentBuild.result == 'FAILURE' } }
  steps {
    sh '''
      npx -y logstrip raw_logs.txt -o clean.log
      your-ai-agent analyze --file clean.log > triage.md
    '''
    archiveArtifacts artifacts: 'triage.md'
  }
}

See the CLI reference for every flag and exit code.