Скрипт Groovy для отмены отправки электронной почты в плагине Email-Ext

В Jenkins мне нужен отличный скрипт, чтобы отменить отправку электронной почты в плагине Email-Ext по приведенному ниже условию.

Если файл status.html недоступен в рабочей области Jenkins, мне нужно отменить отправку электронной почты.


person Deepan Chakravarthy    schedule 05.07.2016    source источник
comment
Есть ли решение, которое можно использовать в декларативном файле jenkins? Я не уверен, как использовать отмену в ответах ниже. Вы когда-нибудь получали ответ на свой вопрос?   -  person adev    schedule 04.04.2019


Ответы (3)


В ответ на предложение холибоба:

  1. В случае, когда узел является локальным, необходимо создать экземпляр канала.

    if(build.workspace.isRemote())
    {
        channel = build.workspace.channel;
    }
    else 
    {
        channel = null;
    }
    
  2. Я считаю, что отсутствует фактическая проверка существования, иначе конструктор всегда возвращает действительный экземпляр, даже если файл не существует:

    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
}
person Vini Bono    schedule 17.07.2017

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'

person holibob    schedule 09.08.2016

Если вы открыты для других идей, мы идем

  1. Мы можем использовать триггеры электронной почты для этого условия, мы можем явно завершить задание, если файл status.html не найден, а затем мы можем настроить триггеры электронной почты только в случае успеха.

  2. Если вы не хотите играть со статусом задания, мы можем создать новое задание Jenkins для запуска электронной почты, а из вашего исходного задания использовать этап условной сборки и проверить наличие файла, соответственно, вы можете либо запустить нижестоящее задание для отправки по электронной почте, либо проигнорировать вызов дочернего [задание по электронной почте].

  3. Вы можете проверить этот ответ в переполнение стека.

person prudviraj    schedule 28.07.2016
comment
Спасибо. проверит и вернется к вам. - person Deepan Chakravarthy; 29.07.2016