jenkins - 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"
);
}
}
}
解决方案
实现此目的的一种方法是使用以下技术:在您的管道中定义一个环境变量(或全局变量),该变量将保存默认邮件列表(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"}'
}
}
}
}
}
如果两个参数都为空,则不会发送邮件。
您还可以修改逻辑,如果用户输入了邮件列表,它将被发送到用户输入,否则将被发送到默认列表。
推荐阅读
- javascript - setInterval 不等待内部时间
- java - 没有为 BeforeAll 方法中的参数注册 ParameterResolver
- excel - VBA下拉菜单不断崩溃
- python - Tensorflow 中的 `tf.function` 和 `autograph.to_graph` 有什么关系?
- html - Angular / Bootstrap 4:多行多张卡片
- ms-access - 如何编写查询以获得我想要的结果?
- azure - 在 Azure Powershell 函数中使用 Azure CLI
- twig - Twig 在内部使用 htmlspecialchars 进行转义。我如何通过 ENT_NOQUOTES?
- git - 带有 git 哈希对象的 git ls-tree
- javascript - 无法安装 npm 包 - bcrypt@3.0.6 install: `node-pre-gyp install --fallback-to-build` in Ubuntu 18.04