Ответ 1
Вы можете попробовать обновить отметки времени тестовых отчетов как шаг сборки ( "Выполнить оболочку script" ). Например.
cd path/to/test/reports
touch *.xml
Я получаю сообщение об ошибке "Отчеты об испытаниях были найдены, но ни один из них не является новым. Проходили ли тесты?" при попытке отправить результаты unit test по электронной почте. Причина в том, что у меня есть специальная работа Дженкинса, которая импортирует артефакты из тестового задания самому себе и отправляет результаты теста по электронной почте. Причина, по которой я делаю это, - это то, что я не хочу, чтобы Дженкинс посылал всем разработчикам электронную почту в течение ночи:), поэтому я "постпонирую" отправку по электронной почте, поскольку сам Дженкинс не поддерживает задержанные уведомления по электронной почте (к сожалению).
Однако, к моменту выполнения задания "отправить результаты теста по электронной почте", тесты составят часы, и я получаю ошибку, указанную в заголовке вопроса. Любые идеи о том, как обойти эту проблему?
Вы можете попробовать обновить отметки времени тестовых отчетов как шаг сборки ( "Выполнить оболочку script" ). Например.
cd path/to/test/reports
touch *.xml
Обновление последней измененной даты также может быть достигнуто в самом gradle:
task jenkinsTest{
inputs.files test.outputs.files
doLast{
def timestamp = System.currentTimeMillis()
test.testResultsDir.eachFile { it.lastModified = timestamp }
}
}
build.dependsOn(jenkinsTest)
Как уже упоминалось здесь: http://www.practicalgradle.org/blog/2011/06/incremental-tests-with-jenkins/
Здесь обновленная версия для Jenkinsfile (декларативный трубопровод):
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'make build'
}
}
stage('Test') {
steps {
sh 'make test'
script {
def testResults = findFiles(glob: 'build/reports/**/*.xml')
for(xml in testResults) {
touch xml.getPath()
}
}
}
}
}
post {
always {
archiveArtifacts artifacts: 'build/libs/**/*.jar', fingerprint: true
junit 'build/reports/**/*.xml'
}
}
}
Выполнить cd path/to/test/reports touch *.xml
не работает для меня, но выполняйте следующие команды:
mvn clean test через консоль или через jenkins.
Это создает новые отчеты об испытаниях.
Была такая же проблема для заданий, выполняемых повторно (каждые 30 минут).
Для задания перейдите к Конфигурация, Сборка, Дополнительно и в разделе Переключатели добавьте: --stacktrace --continue --rerun-tasks
Убедитесь, что вы указали правильный путь против "тестовых отчетов XML" в конфигурации jenkins, например "target/surefire-reports/*. xml" Нет необходимости касаться *.xml, поскольку jenkins не будет жаловаться, даже если результат теста xml файла не изменится.
если вы используете ведомое устройство Windows, вы можете "коснуться" результатов, используя groovy этап конвейера с powershell:
powershell 'ls "junitreports\\*.*" | foreach-object { $_.LastWriteTime = Get-Date }'
Это происходит, если вы используете тестовый отчет, который не был изменен этим заданием во время выполнения.
В случае, если для целей тестирования, если вы тестируете с уже созданным файлом, добавьте приведенную ниже команду в задание jenkins под Build> Execute Shell
chmod -R 775 /root/.jenkins/workspace/JmeterTest/output.xml
echo " " >> /root/.jenkins/workspace/JmeterTest/output.xml
Приведенная выше команда изменяет временную метку файла, поэтому ошибка не будет отображаться.
Примечание: чтобы добиться того же в Execute Shell вместо вышеупомянутого, не пытайтесь переименовывать файл с помощью команды move mv и т.д. Он не будет работать, добавлять и удалять то же самое только для метки времени изменения файла.
Для меня такие команды, как chmod -R 775 test-Results.xml
или touch test-Results.xml
не работают из-за ошибки разрешения. В качестве обходного пути можно указать новый файл в настройках отчета о тестировании и команду скопировать старый файл отчета xml в новый файл.
Вы можете добавить следующую команду оболочки в раздел "Предварительные шаги" при настройке своей работы на Jenkins
mvn clean test
это очистит тест
Решением для меня было удаление node_modules
и изменение версии node
(от 7.1 до 8.4) на jenkins. Это.