Получение шаблонов сценариев email-ext для работы с конвейером Jenkins

Я недавно перешел на Jenkins 2.x и экспериментирую с конвейерным потоком, но мне кажется, что я не могу заставить плагин email-ext работать с хорошими шаблонами скриптов. Хотя мой стандартный поток по-прежнему работает нормально, если я попробую следующее, я получаю сообщение об ошибке с неожиданным токеном SCRIPT

    emailext mimeType: 'text/html', replyTo: 'xxxx', subject: "${env.JOB_NAME} - Build# ${env.BUILD_NUMBER} - ${env.BUILD_STATUS}", to: 'xxxx', body: "${SCRIPT, template='regressionfailed.groovy'}"

Я знаю, что на раннем этапе были проблемы с расширением токенов, но похоже, что в последних обновлениях вики они были исправлены. Я также по-прежнему не получаю расширения токенов для каких-либо токенов. Есть ли хорошая ссылка, чтобы заставить это снова работать. Я хотел бы переключиться на конвейерный поток, но шаблон электронной почты с расширением токена является ключом к рабочему процессу.


person naven87    schedule 06.10.2016    source источник
comment
Вы когда-нибудь догадывались об этом? У меня такая же проблема, и ничего из того, что я пробовал, не работает.   -  person TortillaCurtain    schedule 06.12.2016
comment
Вы нашли решение? У меня точно такая же проблема   -  person BvuRVKyUVlViVIc7    schedule 07.12.2016
comment
Также ищу исправление   -  person Peter Reid    schedule 07.01.2017
comment
Похоже, что шаблоны Jelly не поддерживаются в группах конвейеров Jenkins .google.com / forum / #! msg / jenkinsci-users / turlQIsPgCc /   -  person Chris Jaga    schedule 23.03.2017


Ответы (5)


Нет проблем с использованием emailext в декларативном конвейере. Но ваш скрипт не сможет правильно получить доступ к параметру build.result, потому что он еще не завершен. Как в скрипте по умолчанию groovy-html.template.

Изменить: на самом деле вы можете получить доступ к build.result, если вы вручную установите его самостоятельно.

Поэтому лучше всего добавить этап в конце декларативного конвейера следующим образом:

stage('Send email') {
    def mailRecipients = "[email protected]"
    def jobName = currentBuild.fullDisplayName

    emailext body: '''${SCRIPT, template="groovy-html.template"}''',
        mimeType: 'text/html',
        subject: "[Jenkins] ${jobName}",
        to: "${mailRecipients}",
        replyTo: "${mailRecipients}",
        recipientProviders: [[$class: 'CulpritsRecipientProvider']]
}

Также обратите внимание, что если вы используете свой собственный скрипт, вы не можете назвать его "groovy-html.template" или "groovy-text.template", потому что они по умолчанию являются emailext (так что к файлу даже не будет доступа). См. «Содержимое сценария» здесь.

person user3360767    schedule 14.08.2017
comment
Я переписал, чтобы соответствовать приведенному выше, но основной файл groovy-html.template по умолчанию все еще выдает ошибки, жалуясь на исключение, возникшее во время рендеринга шаблона: нет такого свойства: changeSet для класса: org.jenkinsci.plugins.workflow.job.WorkflowRun - person naven87; 15.08.2017
comment
да. Это из-за дополнительной проблемы. Поскольку API изменился, функция теперь называется changeSets, но шаблон по умолчанию не обновляется и по-прежнему вызывает старую функцию. Вам нужно будет загрузить шаблон по умолчанию, изменить вызов на changeSets и добавить итерацию. Может быть, это заслуживает нового вопроса. - person user3360767; 16.08.2017
comment
@ user3360767 Я исправил эти ошибки, и в новом выпуске есть рабочие шаблоны. - person sorin; 21.09.2017
comment
Где хранится файл шаблона? Как я могу добавить свой? - person Alex Pi; 17.11.2017
comment
Groovy-html.template, пожалуйста, расположение файла? - person Kishore; 09.05.2019
comment
может ли кто-нибудь указать мне, как правильно использовать условный оператор, такой как if (), в этом шаблоне. Я сравниваю здесь только логическое значение переменной окружения, но кажется, что этот оператор if, который я использовал, не работает. if ( "${env.MY_ENV}" == "true" ) { %> blah blah <% } - person vgdub; 03.06.2021

Видимо все это знают. Существует два способа определения конвейера: декларативный конвейер (начинается с «конвейера») и конвейер со сценарием (начинается с «узла»).

Используя декларативный конвейер, необходимо указать сценарий для выполнения процедуры, т.е. использовать def для определения переменных. Итак, в случае трубопровода:

stage('Email') {
    steps {
        script {
            def mailRecipients = '[email protected]'
            def jobName = currentBuild.fullDisplayName
            emailext body: '''${SCRIPT, template="groovy-html.template"}''',
            mimeType: 'text/html',
            subject: "[Jenkins] ${jobName}",
            to: "${mailRecipients}",
            replyTo: "${mailRecipients}",
            recipientProviders: [[$class: 'CulpritsRecipientProvider']]
        }
    }
}

Я потратил на это некоторое время, надеюсь, это будет полезно для кого-то еще.

person Daniele Cruciani    schedule 10.05.2018

Сегодня столкнулся с той же проблемой, по-видимому, определение тела до текста электронной почты, похоже, помогает:

def emailBody = '${SCRIPT, template="regressionfailed.groovy"}'
def emailSubject = "${env.JOB_NAME} - Build# ${env.BUILD_NUMBER} - ${env.BUILD_STATUS}"
emailext(mimeType: 'text/html', replyTo: 'xxxx', subject: emailSubject, to: 'xxxx', body: emailBody)

Помните, что вам все равно может потребоваться переделать части вашего шаблона.

person Martin    schedule 28.03.2017
comment
Кто-нибудь портировал какие-то образцы шаблонов, похоже, что те, с плагином, больше не работают. - person naven87; 24.04.2017
comment
@ naven87 это зависит от вашего шаблона. Пайплайны по-прежнему вводят те же переменные, что и фристайл. Например, если у вас есть матричный шаблон, он, конечно, будет несовместим с конвейером. В итоге мне пришлось написать свою собственную логику для настройки и рендеринга шаблона, поскольку мне также потребовались некоторые дополнительные переменные, которые по умолчанию не были доступны в шаблоне. - person Martin; 26.04.2017
comment
Когда сделайте то, что вы предлагаете: def TEST = '$ {CHANGES, showPaths = true, format =% a:% r% p \ n - \% m \, pathFormat = \ n \ t-% p}' Затем ТЕСТ вернет текст так, как он был написан, и он не расширен до того, что мы действительно хотим. - person Doron Shai; 23.05.2017

Я удивлен, что никто не указал на фундаментальную проблему с ошибкой, о которой сообщил OP. Ошибка исходит от самого компилятора Groovy, и она возникает из-за того, что ${SCRIPT...} находится внутри двойных кавычек, что делает его GString (недопустимым). Чтобы исправить ошибку, упомянутую в OP, вам просто нужно вместо этого использовать одинарные кавычки:

    emailext mimeType: 'text/html', replyTo: 'xxxx', subject: "${env.JOB_NAME} - Build# ${env.BUILD_NUMBER} - ${env.BUILD_STATUS}", to: 'xxxx', body: '${SCRIPT, template='regressionfailed.groovy'}'

Вы можете воспроизвести ошибку даже с помощью автономного интерпретатора Groovy следующим образом:

$ cat << 'END' > /tmp/t.groovy
> def emailext(Map opts) {
> }
>
> emailext mimeType: 'text/html', replyTo: 'xxxx', subject: "${env.JOB_NAME} - Build# ${env.BUILD_NUMBER} - ${env.BUILD_STATUS}", to: 'xxxx', body: "${SCRIPT, template='regressionfailed.groovy'}"
> END
$ groovy /tmp/t.groovy
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/private/tmp/t.groovy: 4: unexpected token: SCRIPT @ line 4, column 150.
   TATUS}", to: 'xxxx', body: "${SCRIPT, te
                                 ^

1 error
person haridsv    schedule 02.01.2020

Уведомление по электронной почте для сценария конвейера:

mail bcc: '', body: body, cc: '', from: '', replyTo: '', subject: 'Build Done', to: '[email protected]'
person user2030113    schedule 01.03.2019
comment
вы можете удалить ответ, чтобы восстановить потерянную репутацию ... плюс, имя пользователя auto-gen можно изменить здесь: stackoverflow.com/users/ edit / 2030113;) - person mirekphd; 07.12.2019