Расширенная электронная почта Jenkins - presendScript не может создать файл - PullRequest
0 голосов
/ 07 августа 2020

Я написал следующий сценарий предварительной отправки для расширенного расширения электронной почты, чтобы отправлять электронную почту только один раз каждые 20 часов, а не каждую сборку:

String pname = '${env.JOB_NAME}';

long minEmailGap = 1000 * 60 * 60 * 20; // 20 hours in milliseconds

File file = new File("/var/lib/jenkins/TimestampFor" + pname + ".txt");

if (file.exists() == false) {
file.createNewFile();
}
else {
long currentTime = (new Date()).getTime();

if (file.lastModified() + minEmailGap > currentTime) {
    cancel = true;
}
else {
    file.setLastModified(currentTime);
}
}

Следующая ошибка мешает успешному завершению сценария:

java.io.IOException: No such file or directory
    at java.io.UnixFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(File.java:1012)
    at java_io_File$createNewFile$0.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:163)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:165)
    at org.kohsuke.groovy.sandbox.impl.Checker$checkedCall$3.callStatic(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194)
    at Script1.run(Script1.groovy:8)
    at hudson.plugins.emailext.ExtendedEmailPublisher.executeScript(ExtendedEmailPublisher.java:621)
    at hudson.plugins.emailext.ExtendedEmailPublisher.executePresendScript(ExtendedEmailPublisher.java:571)
    at hudson.plugins.emailext.ExtendedEmailPublisher.sendMail(ExtendedEmailPublisher.java:455)
    at hudson.plugins.emailext.EmailExtStep$EmailExtStepExecution.run(EmailExtStep.java:236)
    at hudson.plugins.emailext.EmailExtStep$EmailExtStepExecution.run(EmailExtStep.java:174)
    at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47)
    at hudson.security.ACL.impersonate(ACL.java:367)
    at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Jenkins v2.235.2 имеет разрешение в / var / lib / jenkins. Все разрешено в настройках безопасности скрипта. Файл не создается и, в свою очередь, не оценивается. Что здесь не так?

1 Ответ

0 голосов
/ 07 августа 2020

JOB_NAME может содержать косую черту (/), если задание находится внутри каталога, а затем ваш сценарий попытается создать файл в каталоге, который не существует.

Вы можете замените каждый / в вашем JOB_NAME символом подчеркивания (_):

String pname = '${env.JOB_NAME}.replace('/', '_')';

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...