Проблема при генерации отчета JUnit в конвейере Jenkins

#jenkins #junit

#дженкинс #junit

Вопрос:

Я создаю post job в конвейере Jenkins для публикации результатов тестирования с использованием junit, html и cobertura. Код выглядит следующим образом

             post {
                always {
                    publishTestResults(
                        script: this,
                        junit: [
                            active:true,
                            allowEmptyResults:true,
                            archive: true,
                            pattern: '**/reports/mocha.xml',
                            updateResults: true
                        ],
                        cobertura: [
                            active:true,
                            allowEmptyResults:true,
                            archive:true,
                            pattern: '**/coverage/cobertura/cobertura-coverage.xml'
                        ],
                        html: [
                            active:true,
                            allowEmptyResults:true,
                            archive:true,
                            name: 'NYC/Mocha',
                            path: '**/coverage/html'
                        ],
                        lcov: [
                            active:true,
                            allowEmptyResults:true,
                            archive:true,
                            name: 'LCOV Coverage',
                            path: '**/coverage/lcov/lcov-report'
                        ]
                    )
                    cobertura coberturaReportFile: 'coverage/cobertura/cobertura-coverage.xml'
                    junit 'reports/mocha.xml'
                    cleanWs()
                  //  deleteDir()
                    script {
                        FAILED_STAGE = env.STAGE_NAME
                    }
                }
            }
        }
  

Проблема в том, что при выполнении задания в Jenkins я получаю сообщение об ошибке:

 find . -wholename **/reports/mocha.xml -exec touch {} ;
touch: cannot touch './reports/mocha.xml': Permission denied
  

Я полагаю, что проблема, поднятая командой junit. Как я мог решить эту проблему?

P / S: Сервер Jenkins работает на Ubuntu. Я попытался изменить / etc / sudoers и добавить эту строку, чтобы Дженкинс выполнял команду от имени root. Это все еще не могло решить мою проблему.

 jenkins ALL=(ALL) NOPASSWD: ALL
  

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

1. что такое «publishTestResults( script: this», это не встроенный шаг, верно?

2. это часть стандартной библиотеки Piper

Ответ №1:

После проверки кода на: https://github.com/SAP/jenkins-library/blob/5c13a0e2a20132336824c70b743c364bcb5341f4/vars/testsPublishResults.groovy#L136

Похоже, вы можете избежать проблемы, установив updateResults значение false

Если вам абсолютно необходимо обновить временную метку в файле результатов, вам придется открыть сеанс терминала, перейти в рабочую область проекта (с пользователем jenkins) и попытаться запустить touch ./reports/mocha.xml , а затем отладить его оттуда.

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

1. Я попытался запустить touch ./reports/mocha.xml вручную, и все в порядке. Это только задание Дженкинса, которое не смогло выполнить команду.

2. Похоже на проблему с env (может быть, вы пытаетесь с другим пользователем?). можете ли вы попробовать предложение выше? (updateResults=false)

3. вы правы. я запускаю его с конкретным пользователем Jenkins, которому дано очень ограниченное разрешение. дело в том, что здесь не разрешено ни предоставлять пользователю Дженкинса дополнительные разрешения, ни переключаться на другого пользователя для выполнения задания.

4. затем просто установите updateResults = false, дайте мне знать, сработало ли это