В Jenkins мне нужен отличный скрипт, чтобы отменить отправку электронной почты в плагине Email-Ext по приведенному ниже условию.
Если файл status.html
недоступен в рабочей области Jenkins, мне нужно отменить отправку электронной почты.
В Jenkins мне нужен отличный скрипт, чтобы отменить отправку электронной почты в плагине Email-Ext по приведенному ниже условию.
Если файл status.html
недоступен в рабочей области Jenkins, мне нужно отменить отправку электронной почты.
В ответ на предложение холибоба:
В случае, когда узел является локальным, необходимо создать экземпляр канала.
if(build.workspace.isRemote())
{
channel = build.workspace.channel;
}
else
{
channel = null;
}
Я считаю, что отсутствует фактическая проверка существования, иначе конструктор всегда возвращает действительный экземпляр, даже если файл не существует:
if ((fp != null) && fp.exists())
{
cancel = false;
}
Наконец, в случае необходимости подстановочного знака в пути, я боюсь, exists() не работает, но следующее работает:
import jenkins.*
import jenkins.model.*
import hudson.*
import hudson.model.*
import javax.mail.internet.*
import javax.mail.*
import javax.activation.*
def workspace = build.getEnvVars()["WORKSPACE"]
listener.logger.println('WS: ' + workspace)
if(build.workspace.isRemote())
{
channel = build.workspace.channel;
}
else
{
channel = null
}
fp = new hudson.FilePath(channel, build.workspace.toString() )
if ((fp != null) && fp.list("**/path/to/*.html").size()>0)
{
listener.logger.println('file found')
cancel = false
}
else
{
// file not found
listener.logger.println('file not found, cancelling email')
cancel = true // disable email
}
Groovy — это то, что вам нужно, и просто посмотрите, присутствует ли файл status.html в WORKSPACE. Опция сценария предварительной отправки Email-ext в плагине предоставляет предопределенные переменные, включая «отмена — логическое значение, которое, если установлено значение true, отменит отправку электронной почты».
import jenkins.*
import jenkins.model.*
import hudson.*
import hudson.model.*
import javax.mail.internet.*;
import javax.mail.*
import javax.activation.*
def workspace = manager.build.getEnvVars()["WORKSPACE"]
manager.listener.logger.println('WS: ' + workspace)
if(manager.build.workspace.isRemote())
{
channel = manager.build.workspace.channel;
}
fp = new hudson.FilePath(channel, manager.build.workspace.toString() + "/status.html")
if(fp != null)
{
manager.listener.logger.println('status.html found')
cancel = false
}
else
{
// file not found
cancel = true // disable email
}
Более подробный пример использования отмены можно увидеть здесь 'Отключить уведомления по электронной почте с использованием параметра задания Jenkins а>'
Если вы открыты для других идей, мы идем
Мы можем использовать триггеры электронной почты для этого условия, мы можем явно завершить задание, если файл status.html не найден, а затем мы можем настроить триггеры электронной почты только в случае успеха.
Если вы не хотите играть со статусом задания, мы можем создать новое задание Jenkins для запуска электронной почты, а из вашего исходного задания использовать этап условной сборки и проверить наличие файла, соответственно, вы можете либо запустить нижестоящее задание для отправки по электронной почте, либо проигнорировать вызов дочернего [задание по электронной почте].
Вы можете проверить этот ответ в переполнение стека.