Persist notification recipients in Jenkins credentials

This commit is contained in:
2026-05-02 22:47:55 +08:00
parent 39b1141287
commit 813dbf1fdd
12 changed files with 44 additions and 32 deletions

View File

@@ -10,7 +10,8 @@ pipeline {
}
parameters {
string(name: 'EMAIL_RECIPIENTS', defaultValue: '', description: '本次运行追加邮件通知收件人;会与 Jenkins 全局环境变量 GENARRATIVE_NOTIFICATION_EMAILS 合并发送')
string(name: 'EMAIL_RECIPIENTS_CREDENTIAL_ID', defaultValue: 'genarrative-notification-emails', description: '持久收件人 Secret Text 凭据 ID凭据内容为逗号分隔邮箱留空则只使用本次追加收件人')
string(name: 'EMAIL_RECIPIENTS', defaultValue: '', description: '本次运行追加邮件通知收件人;会与持久收件人凭据合并发送')
string(name: 'SOURCE_JOB_NAME', defaultValue: '', description: '来源流水线名称')
string(name: 'SOURCE_BUILD_NUMBER', defaultValue: '', description: '来源构建号')
string(name: 'SOURCE_BUILD_URL', defaultValue: '', description: '来源构建 URL')
@@ -27,26 +28,27 @@ pipeline {
stage('Send Email') {
steps {
script {
def recipientList = []
[env.GENARRATIVE_NOTIFICATION_EMAILS, params.EMAIL_RECIPIENTS].each { rawRecipients ->
rawRecipients?.split(',')?.each { recipient ->
def normalized = recipient.trim()
if (normalized && !recipientList.contains(normalized)) {
recipientList.add(normalized)
def sendNotification = { persistedRecipients ->
def recipientList = []
[persistedRecipients, params.EMAIL_RECIPIENTS].each { rawRecipients ->
rawRecipients?.split(',')?.each { recipient ->
def normalized = recipient.trim()
if (normalized && !recipientList.contains(normalized)) {
recipientList.add(normalized)
}
}
}
}
def recipients = recipientList.join(',')
if (!recipients) {
echo '[notify-email] EMAIL_RECIPIENTS 与 GENARRATIVE_NOTIFICATION_EMAILS 均未配置,跳过邮件发送。'
return
}
def recipients = recipientList.join(',')
if (!recipients) {
echo '[notify-email] 持久收件人凭据与 EMAIL_RECIPIENTS 均未配置,跳过邮件发送。'
return
}
def result = params.SOURCE_RESULT?.trim() ?: 'UNKNOWN'
def jobName = params.SOURCE_JOB_NAME?.trim() ?: 'unknown-job'
def buildNumber = params.SOURCE_BUILD_NUMBER?.trim() ?: 'unknown-build'
def subject = "[Genarrative][${result}] ${jobName} #${buildNumber}"
def body = """Genarrative Jenkins 流水线执行结果
def result = params.SOURCE_RESULT?.trim() ?: 'UNKNOWN'
def jobName = params.SOURCE_JOB_NAME?.trim() ?: 'unknown-job'
def buildNumber = params.SOURCE_BUILD_NUMBER?.trim() ?: 'unknown-build'
def subject = "[Genarrative][${result}] ${jobName} #${buildNumber}"
def body = """Genarrative Jenkins 流水线执行结果
结果: ${result}
流水线: ${jobName}
@@ -60,8 +62,18 @@ pipeline {
摘要: ${params.SUMMARY ?: ''}
"""
mail to: recipients, subject: subject, body: body
echo "[notify-email] 已发送邮件: recipients=${recipients}, source=${jobName} #${buildNumber}, result=${result}"
mail to: recipients, subject: subject, body: body
echo "[notify-email] 已发送邮件: recipients=${recipients}, source=${jobName} #${buildNumber}, result=${result}"
}
def credentialId = params.EMAIL_RECIPIENTS_CREDENTIAL_ID?.trim()
if (credentialId) {
withCredentials([string(credentialsId: credentialId, variable: 'PERSISTED_EMAIL_RECIPIENTS')]) {
sendNotification(env.PERSISTED_EMAIL_RECIPIENTS)
}
} else {
sendNotification('')
}
}
}
}