|
|
@@ -1,16 +1,41 @@
|
|
|
#!/usr/bin/env groovy
|
|
|
-def call(String secret = '') {
|
|
|
- def notifier = new org.feishu.FeishuNotifier()
|
|
|
- def status = currentBuild.currentResult // SUCCESS/FAILED/ABORTED
|
|
|
- def emoji = status == 'SUCCESS' ? '✅' : '❌'
|
|
|
- def msg = """**构建结束**
|
|
|
-项目:${env.JOB_NAME} #${env.BUILD_NUMBER}
|
|
|
-结果:**${status}**
|
|
|
-耗时:${currentBuild.durationString.replace(' and counting', '')}"""
|
|
|
- notifier.send(
|
|
|
- webhook: env.FEISHU_WEBHOOK,
|
|
|
- secret : secret,
|
|
|
- title : "$emoji Jenkins 构建$status",
|
|
|
- text : msg
|
|
|
- )
|
|
|
+
|
|
|
+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
|
|
|
+ }
|
|
|
}
|