Проблема при создании отчета JUnit на Jenkins Pipeline

Я создаю почтовую работу в конвейере 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

что такое «publishTestResults (сценарий: это», это не встроенный шаг, верно?

Vano 08.04.2019 11:39

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

Phạm Nhật Minh 08.04.2019 13:37
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
В этой статье блога мы проведем вас через процесс установки Gradle на Ubuntu 22.04, интеграции его с Jenkins и создания задания Gradle. Мы...
1
2
991
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

Phạm Nhật Minh 16.05.2019 16:19

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

Vano 29.05.2019 15:37

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

Phạm Nhật Minh 30.05.2019 10:40

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

Vano 30.05.2019 13:41

Другие вопросы по теме