Я создаю почтовую работу в конвейере 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
это часть стандартной библиотеки Piper
Из проверки кода по адресу: https://github.com/SAP/jenkins-library/blob/5c13a0e2a20132336824c70b743c364bcb5341f4/vars/testsPublishResults.groovy#L136
Похоже, вы можете избежать этой проблемы, установив updateResults
на false
Если вам абсолютно необходимо обновить отметку времени в файле результатов, вам придется открыть сеанс терминала, перейти в рабочую область проекта (с пользователем jenkins) и попытаться запустить touch ./reports/mocha.xml
, а затем отладить его оттуда.
Я попытался запустить touch ./reports/mocha.xml
вручную, и все в порядке. Только задание Дженкинса не смогло запустить команду.
Похоже на проблему с env (может быть, вы пытаетесь использовать другого пользователя?). Вы можете попробовать предложение выше? (обновлениеРезультаты=ложь)
ты прав. я запускаю его с конкретным пользователем Jenkins, которому предоставлено очень ограниченное разрешение. дело в том, что ему не разрешено давать пользователю Jenkins больше разрешений и не переключаться на другого пользователя для этой работы.
затем просто установите updateResults=false, дайте мне знать, если это сработало
что такое «publishTestResults (сценарий: это», это не встроенный шаг, верно?