| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- #!/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
- }
- }
|