#!/usr/bin/env groovy def call(Map args=[:]) { String webhook = args.webhook ?: credentialsId('feishu-webhook') String secret = args.secret ?: '' def result = currentBuild.currentResult // SUCCESS / FAILURE / ABORTED def emoji = result == 'SUCCESS' ? '✅' : '❌' def ts = (System.currentTimeMillis()/1000) as int def sign = '' if (secret) { def mac = javax.crypto.Mac.getInstance("HmacSHA256") mac.init(new javax.crypto.spec.SecretKeySpec("${ts}\n${secret}".bytes,"HmacSHA256")) sign = mac.doFinal().encodeBase64().toString() } def body = [ msg_type: "interactive", card: [ header: [title: [tag: "plain_text", content: "${emoji} Jenkins 构建${result}"]], elements: [ [tag: "div", text: [tag: "lark_md", content: "**项目**:${env.JOB_NAME} #${env.BUILD_NUMBER}\n**结果**:${result}\n**耗时**:${currentBuild.durationString.replace(' and counting','')}"]], [tag: "action", actions: [ [tag: "button", type: "primary", text: [tag: "plain_text", content: "查看构建"], url: env.BUILD_URL] ]] ] ] ] if (secret) { body += [timestamp: ts as String, sign: sign] } withCredentials([string(credentialsId: webhook, variable: 'URL')]) { httpRequest url: env.URL, httpMode: 'POST', contentType: 'APPLICATION_JSON', requestBody: groovy.json.JsonOutput.toJson(body), consoleLogResponseBody: true } }