Jenkinsfile - 如何传递参数来发送电子邮件

Jenkinsfile - How to pass parameter to send emails

我的问题:

如果最终用户想要定期接收带有附加 csv 文件的电子邮件,我想发送电子邮件,我们可以更改管道以将“isSendEmail”设置为“true”并使用该值填充默认值用户的电子邮件地址和作业将从那时起自动发送电子邮件。

但是在配置 jenkisnfile 时,作业 运行 没问题,但是没有收到电子邮件通知? 在 jenkinsfile 中为电子邮件 ID 配置参数以发送电子邮件的正确方法是什么,这样一来,我也可以轻松地 运行 手动完成工作,并临时将电子邮件发送给其他人。

詹金斯文件

 
pipeline {
  agent any
  options {
    buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '5')
  }
  stages {
       stage('Use AWS CLI to detect untagged resources') { steps { 
       script {
            def awsUtil = new AwsUtil()
            sh """#!/bin/bash
            set
            aws resourcegroupstaggingapi get-resources --tags-per-page 100 --tag-filters Key=SysName,Values=KickMe --tag-filters Key="SysName in ServiceNow",Values=False > tag-filter.json
            jq '.ResourceTagMappingList[].Tags |= map(select(.Key|IN("ManagedBy","SysName","Owner","SysName in ServiceNow","Name","TSM")))' tag-filter.json > untagged-resources.json
            ls
            echo "un tag resource.json file data"
            cat untagged-resources.json
            echo "--------------"
            cat tag-filter.json
            python untag_resources_convert_csv.py
            ls
            """
        }}}
       stage('Setup parameters') { steps {
       script {
           properties([
                parameters([
                    booleanParam(
                       defaultValue: true, 
                       description: '', 
                       name: 'isSendEmail'  
                    ),
                    string(
                       defaultValue: '', 
                       description: '', 
                       name: 'def@xxx.com,abc@xxx.com,ghi@xxx.com', 
                       trim: true
                    )
                ])
            ])
        }}}                             
    }
    post {
        always {
            archiveArtifacts artifacts: 'unTagResources_Details.csv', onlyIfSuccessful: true
            emailext (
        attachmentsPattern: 'unTagResources_Details.csv', body: '''${SCRIPT, template="groovy-html.template"}''',
                subject: '$DEFAULT_SUBJECT',
                mimeType: 'text/html',to: "email id"
            );
        }    
    }
}

实现此目的的一种方法是使用以下技术:在您的管道中定义一个环境变量(或全局变量),它将保存默认邮件列表(示例中的 DEFUALT_MAIL_LIST),该邮件列表可以更改根据未来的需要在管道代码中。
此外,定义一个管道参数(示例中的 MailingList),使手动构建作业的用户能够传递将接收邮件通知的逗号分隔的邮件字符串。
最后向您的 post 块添加一个条件,以检查是否填写了其中一个参数 - 如果是,则将邮件发送给所有收件人。

此解决方案将允许您使用默认的、代码配置的邮件列表以及用户控制的列表。
这是一个实现示例:

pipeline {
    agent any
    options {
        buildDiscarder logRotator( numToKeepStr: '5')
    }
    environment{
        DEFUALT_MAIL_LIST = 'def@xxx.com,abc@xxx.com,ghi@xxx.com'
    }
    parameters {
        string(name:'MailingList', defaultValue: '',description: 'Email mailing list', trim: true)
    }
    stages {
        stage('Use AWS CLI to detect untagged resources') {
            steps {
                ...
            }
        }
    }
    post {
        always {
            archiveArtifacts artifacts: 'unTagResources_Details.csv', onlyIfSuccessful: true
            script {
                if(params.MailingList || env.DEFUALT_MAIL_LIST){
                    emailext subject: '$DEFAULT_SUBJECT', mimeType: 'text/html', attachmentsPattern: 'unTagResources_Details.csv',
                            to: "${params.MailingList},${env.DEFUALT_MAIL_LIST}", body: '${SCRIPT, template="groovy-html.template"}'
                }
            }
        }
    }
}

如果两个参数都为空,则不会发送邮件。
您还可以修改逻辑,如果用户输入邮件列表,它将发送到用户输入,否则将发送到默认列表。