| 
					
				 | 
			
			
				@@ -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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |