My Question:
I want to send email if an enduser ever wants to receive emails on a regular basis with the attached csv file, we can change the pipeline to set the "isSendEmail" to "true" and populate the default value with that user's email address and the job will automatically send emails from that point on.
but while configuring the jenkisnfile, job runs fine but there is no email notification received? what is the correct way to configure parameter for Email Id's in jenkinsfile to send email so that doing it this way also allows me to easily run the job manually and sends the email to other people on an adhoc basis.
Jenkinsfile
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: '[email protected],[email protected],[email protected]',
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"
);
}
}
}
One way to achieve this is using the following technique: define an environment variable (or a global one) in you pipeline that will hold the default mailing list (DEFUALT_MAIL_LIST
in the example) which can be changed in the pipeline code according to future needs.
In addition define an pipeline parameter (MailingList
in the example) that will enable users that are manually building the job to pass a comma separated string of mails that will receive the mail notification.
Finally add a condition to your post
block to check if one of the parameters is filled - and if so send the mails to all recipients.
This solution will allow you both a default, code configured, mailing list alongside a user controlled list.
Here is an implementation exmaple:
pipeline {
agent any
options {
buildDiscarder logRotator( numToKeepStr: '5')
}
environment{
DEFUALT_MAIL_LIST = '[email protected],[email protected],[email protected]'
}
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"}'
}
}
}
}
}
If both parameters are empty, no mail will be sent.
You can also modify the logic so if the user inputed the mail list it will be sent to the user input, otherwise it will be sent to the default list.