Jenkins Pipeline,在emailext插件中使用Env Var

时间:2019-11-07 08:42:32

标签: jenkins-pipeline

我的管道正在基于每个Job执行生成一个动态收件人列表,我试图使用将该列表设置为变量的列表,以便在emailext插件的``收件人''部分中使用,问题是使用mailext部分后,变量的内容将无法解析。

readMe.md

2 个答案:

答案 0 :(得分:0)

在执行sh命令时,无法重用在该命令中设置的变量。您需要执行以下操作:

最重要的是您将管道文件设为全局变量

def recipientsList

然后执行您的shell命令并检索输出

recipientsList = sh (
                script: '''for Project in `cat results.txt`
                    do
                        grep "mail.com" $JENKINS_HOME/jobs/$Project/config.xml|grep -iv "Ansprechpartner" | awk -F'>' '{print $2}'|awk -F'<' '{print $1}'>> recipientList.txt
                    done
                    recipientList2=`sort -u recipientList.txt`
                    echo $recipientList2
                ''',
                returnStdout: true
            ).trim()

现在,您可以在电子邮件中使用变量$recipientList ...

为避免混淆,我将您的bash变量重命名为recipientList2

编辑:我不知道您想获得什么,但是考虑使用emailext提供的一些默认收件人:

recipientProviders: [ developers(), culprits(), requestor(), brokenBuildSuspects(), brokenTestsSuspects() ],

答案 1 :(得分:0)

我发现唯一的方法是将脚本部分作为变量添加到post节的一部分,并在Pipeline块之外添加变量Definition:

post {
        success {
            script {
                    RECIPIENTLIST = sh(returnStdout: true, script: 'cat recipientListTest.txt')
                                    }
            emailext    to:         "${RECIPIENTLIST}",
                        from:       'jenkins@mail.com',
                        attachmentsPattern: 'Projects2Shelve.txt,jobs2Delete.txt',
                        subject:    "MY SUBJECT", 
                        body:       "MY BODY"
        }