zoukankan      html  css  js  c++  java
  • Jenkins 发邮件的Job

    Jenkins要做到构建失败的时候发送邮件,常规做法是加个全局的post failure,类似这样的代码

    pipeline {
        agent any
    
        stages {
    
            stage('deploy') {
                steps {
                    script {
                        error 'failed';
    
                    }
                }
            }
    
        }
    
        post {
            always {
                echo 'This will always run'
            }
            success {
                echo 'This will run only if successful'
            }
            failure {
                mail bcc: '', body: "<b>Example</b><br>Project: ${env.JOB_NAME} <br>Build Number: ${env.BUILD_NUMBER} <br> URL de build: ${env.BUILD_URL}", cc: '', charset: 'UTF-8', from: '', mimeType: 'text/html', replyTo: '', subject: "ERROR CI: Project name -> ${env.JOB_NAME}", to: "foo@foomail.com";
            }
            unstable {
                echo 'This will run only if the run was marked as unstable'
            }
            changed {
                echo 'This will run only if the state of the Pipeline has changed'
                echo 'For example, if the Pipeline was previously failing but is now successful'
            }
        }
    
    }
    

      这种做法有一点不好之处就是有几个JOB 需要发邮件就需要写几份发邮件代码,对原来Jenkins代码也有侵染。

    有一种办法可以避免这样的情况,新建一个JOB ,这个JOB名字就叫做发邮件,把这个JOB 设置为上游JOB 触发,意思是当需要发邮件的JOB 在构建完以后,不管成功失败都会触发发邮件的JOB,来实现统一发邮件。

    1.新建pipeline JOB, 在‘其它工程后触发’ 这里填上你想要发邮件的job,如果有多个使用逗号分隔 .

    2.pipleline 的代码

    pipeline {
        agent any
    
        stages {
    
            stage('deploy') {
                steps {
                    script {
                        String buildResult = "";
                        String buildNumber = "";
                        String jobName = "";
                        (buildResult, jobName, buildNumber) = getUpstreamBuildResult();
    
                        String buildUrl = "http://localhost:8080/job/${jobName}/${buildNumber}/console"
    
                        if (buildResult == 'FAILURE') {
                            echo "send email";
                            mail bcc: '', body: "<b>Example</b><br>Project: ${jobName} <br>Build Number: ${buildNumber} <br> URL de build: ${buildUrl}", cc: '', charset: 'UTF-8', from: 'tianhe1006@126.com', mimeType: 'text/html', replyTo: '', subject: "ERROR CI: Project name -> ${jobName}", to: "jonas.tian@activenetwork.com";
                        }
    
                    }
                }
            }
    
        }
    
    }
    
    def getUpstreamBuildResult() {
        def upstream = currentBuild.rawBuild.getCause(hudson.model.Cause$UpstreamCause)
        String jobName = upstream ? .getUpstreamProject();
        echo jobName;
        String buildNumber = "${upstream?.getUpstreamBuild()}";
        echo buildNumber;
        def upstreamTriggerBuildResult = Jenkins.instance.getAllItems(AbstractItem.class)
            .findAll {
                it.fullName == upstream.getUpstreamProject()
            }
            .collect {
                proj - > proj.getBuilds().findAll {
                    it.number == upstream.getUpstreamBuild()
                }.collect {
                    it.getResult()
                }
            }
            .flatten()[0];
    
        echo "${upstreamTriggerBuildResult}";
    
        return [upstreamTriggerBuildResult, jobName, buildNumber];
    }
    

      注意一点,这里用到了不安全代码,需要手动approve,运行一次,就会看到报错,一直点approve 就好了,但是如果不想这么麻烦可以安装一个插件

    Permissive Script Security Plugin

    https://wiki.jenkins.io/display/JENKINS/Permissive+Script+Security+Plugin

    安装这个插件后就可以自动approve 不安全代码。

  • 相关阅读:
    noi2002银河英雄传说(并查集)
    Ural1076(km算法)
    km算法的个人理解
    函数之装饰器
    函数进阶(一)
    python全栈测试题(一)
    python基础之循环语句
    字符串方法总结
    python基础3
    python基础2
  • 原文地址:https://www.cnblogs.com/MindSharing/p/12054672.html
Copyright © 2011-2022 走看看