J'ai récemment converti en Jenkins 2.x et j'expérimente avec le flux de pipeline, mais je n'arrive pas à faire fonctionner le plug-in e-mail avec des modèles de script groovy. Bien que mon flux standard fonctionne toujours correctement, si j'essaie ce qui suit, j'obtiens une erreur avec un jeton inattendu 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'}"
Je sais qu'il y a eu des problèmes avec l'expansion des jetons dès le début, mais il semble que les dernières mises à jour du wiki aient été corrigées. Je n'ai également toujours aucune extension de jeton pour aucun jeton. Existe-t-il une bonne référence pour que cela fonctionne à nouveau? Je voudrais passer au flux de pipeline, mais le modèle d'e-mail avec extension de jeton est essentiel pour que le flux fonctionne.
Il n'y a aucun problème à utiliser emailext dans le pipeline déclaratif. Mais votre script ne pourra pas accéder correctement au paramètre "build.result" car il n'est pas encore terminé. Comme dans le script par défaut groovy-html.template.
Modifier: En fait, vous pouvez accéder à build.result si vous le définissez manuellement vous-même.
Il est donc préférable d'ajouter une étape à la fin du pipeline déclaratif comme ceci:
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']]
}
Notez également que si vous utilisez votre propre script, vous ne pouvez pas le nommer "groovy-html.template" ou "groovy-text.template" car ils sont par défaut d'emailext (donc le fichier ne sera même pas accessible). Voir "Contenu du script" ici .
Face au même problème aujourd'hui, avoir apparemment le corps défini avant l'e-mail semble faire l'affaire:
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)
N'oubliez pas que vous devrez peut-être refaire des parties de votre modèle.
Apparemment, tout le monde le sait. Il existe 2 façons de définir un pipeline: pipeline déclaratif (commencer par 'pipeline') et pipeline scripté (commencer par 'node')
En utilisant le pipeline déclaratif, il faut spécifier le script pour exécuter une procédure, c'est-à-dire utiliser def
pour définir les variables. Donc, dans le cas d'un pipeline:
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']]
}
}
}
J'ai passé un peu de temps pour ça, j'espère que c'est utile pour quelqu'un d'autre.