首页 > 解决方案 > Jenkinsfile - 如何传递参数以发送电子邮件

问题描述

我的问题:

如果最终用户想要定期接收带有附件 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"
            );
        }    
    }
}

标签: jenkinsparametersjenkins-pipelinejenkins-pluginsjenkins-groovy

解决方案


实现此目的的一种方法是使用以下技术:在您的管道中定义一个环境变量(或全局变量),该变量将保存默认邮件列表(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"}'
                }
            }
        }
    }
}

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


推荐阅读