Как использовать плагин Rich Text Publisher в конвейере

#jenkins #jenkins-pipeline

#дженкинс #дженкинс-трубопровод

Вопрос:

Я пытаюсь отобразить HTML-отчеты в своем конвейере. Для этого я намеревался повторно использовать плагин Rich Text Publisher, который я использовал в прошлом, для «обычных» заданий или заданий matrix, но мне это не удается 🙂

Вот мой текущий конвейер:

 pipeline{
    agent { label 'master' }
    options {
        disableConcurrentBuilds()
    }
    stages {
        stage('Workspace initialization'){
            steps{
                deleteDir()
                cleanWs()
            }
        }
        stage('main stage') {
            matrix {
                agent any
                axes {
                    axis {
                        name 'PRODUCT'
                        values 'product_A', 'product_B'
                    }
                }
                stages {
                    stage('Quality') {
                        steps {
                            catchError(buildResult:'UNSTABLE', stageResult:'FAILURE') {
                                echo "Quality analysis for ${PRODUCT}"
                                sh 'mkdir -p artifacts/${PRODUCT}; echo "<h2>HTML report for ${PRODUCT}</h2>" > artifacts/${PRODUCT}/summary.html'
                            }
                            rtp {
                                stableText """<html><head><title>Report</title></head> <body>plop</body></html>"""
                                unstableAsStable true
                                failedAsStable true
                                parserName 'HTML'
                                abortedAsStable true
                            }
                        }
                    }
                }
            }
        }
    }
    post {
        always {
            archiveArtifacts artifacts: 'artifacts/**/*'
        }
    }
}
 

Конвейер завершается сбоем со следующей ошибкой:

 Also:   java.lang.IllegalArgumentException: Expected named arguments but got org.jenkinsci.plugins.workflow.cps.CpsClosure2@926e420
java.lang.IllegalArgumentException: Expected named arguments but got org.jenkinsci.plugins.workflow.cps.CpsClosure2@4251545f
    at org.jenkinsci.plugins.workflow.cps.DSL.singleParam(DSL.java:718)
    at org.jenkinsci.plugins.workflow.cps.DSL.parseArgs(DSL.java:706)
...
 

Итак, мой вопрос таков: как использовать плагин Rich text publisher в контексте конвейера?

И бонус, более общий, как вывести эту информацию из документации плагина (например, документация плагина rich text publisher).

Заранее благодарю вас.

Ответ №1:

Согласно документации и сообщению об ошибке, rtp метод ожидает именованные аргументы. Согласно коду и вашему сообщению об ошибке, вместо этого вы передаете один аргумент типа Closure[String] . Вы можете настроить правильное использование, преобразовав аргумент в именованные аргументы следующим образом:

 rtp(
  stableText:       '<html><head><title>Report</title></head> <body>plop</body></html>'
  unstableAsStable: true
  failedAsStable:   true
  parserName:       'HTML'
  abortedAsStable:  true
)
 

и это исправит вашу ошибку.

Комментарии:

1. Большое вам спасибо! Я мог бы продвинуться на один шаг дальше. Теперь я изменил часть rtp на что-то вроде: rtp stableText: '<html><head><title>Report</title></head> <body>plop</body></html>', parserName: 'HTML' и это работает, по крайней мере, конвейер больше не выходит из строя. Но плагин ничего не публикует и говорит в журналах: RTP: Ignoring buildresult==null aka publishing nothing! Есть идеи?

2. @ncarrier Вы, конечно, можете задать новый вопрос об этой новой проблеме и посмотреть, какие ответы будут предоставлены.

3. Хорошо, я думаю, что я ответил на свой собственный (второй) вопрос, похоже, что плагину rtp необходимо установить статус перед выполнением, поэтому, когда он помещается в раздел post, он работает нормально. У меня не будет страниц для каждого продукта, но я показываю глобальный отчет, в котором собраны все отчеты о продуктах, так что для меня проблема полностью решена. Еще раз спасибо 🙂