В рамках действия после сборки в jenkins я хочу удалить задание, если оно не удалось с определенным кодом выхода. Логика здесь такая:
- Моя текущая работа (скрипт perl) запрашивает базу данных MySQL, чтобы узнать, нужно ли ей запускать какое-либо подчиненное задание.
- Если нет, я выхожу с определенным кодом.
- Теперь, как часть шага после сборки, я хочу проверить, завершилось ли текущее задание с определенным кодом, а затем удалить и сбросить следующий номер сборки.
Причина в том, что у меня не было неудачных заданий каждые 5 минут (график сборки настроен на каждые 5 минут). Я искал способ сделать это. Итак, пока у меня есть два способа работы через Manage Jenkins -> Script Console. Но тот же код терпит неудачу, когда я добавляю его к текущей работе Дженкинса.
Работа под управлением Jenkins -> Script Console
import jenkins.model.Jenkins
import hudson.model.*
def jobName = "renum_jenkins_test"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 26
job.save()
Так же как:
import jenkins.model.Jenkins
def jobName = 'renum_jenkins_test'
Jenkins.instance.getItemByFullName(jobName).builds.findAll { it.result
== Result.FAILURE}.each { it.delete() }
Сообщение об ошибке, когда оно запускается как этап пост-сборки в Jenkins Job Configure:
java.nio.file.FileSystemException: /auto/system-dir/idevtest/jenkins/conf/jobs/renum_jenkins_test/builds/.30/.nfs000000000d587f2900000049: Device or resource busy
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.implDelete(UnixFileSystemProvider.java:243)
at sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:103)
at java.nio.file.Files.delete(Files.java:1077)
at sun.reflect.GeneratedMethodAccessor1449.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at hudson.Util.deleteFile(Util.java:247)
at hudson.Util.deleteRecursive(Util.java:310)
и ошибка в журнале Failed говорит:
No such file: /auto/system-dir/idevtest/jenkins/conf/jobs/renum_jenkins_test/builds/30/log
Любые указатели, как я могу избежать этой ошибки, а также определить статус/результат текущей работы?