|
|
@@ -0,0 +1,51 @@
|
|
|
+#!/usr/bin/env groovy
|
|
|
+/**
|
|
|
+ * 在 pipeline 的开始 & 结束各调用一次即可:
|
|
|
+ * onBuildEvent('start')
|
|
|
+ * onBuildEvent('end')
|
|
|
+ */
|
|
|
+def call(String phase) {
|
|
|
+ // 从 Jenkins 环境变量里取值
|
|
|
+ String jobName = env.JOB_NAME
|
|
|
+ String buildNum = env.BUILD_NUMBER
|
|
|
+ String branch = env.GIT_BRANCH ?: 'unknown'
|
|
|
+ String result = currentBuild.currentResult ?: 'UNKNOWN'
|
|
|
+ String buildUrl = env.BUILD_URL
|
|
|
+ String duration = phase == 'end' ? "${currentBuild.durationString}" : '-'
|
|
|
+
|
|
|
+ // 颜色 & 图标随结果变化
|
|
|
+ String headerColor = phase == 'start' ? 'blue' : (result == 'SUCCESS' ? 'green' : 'red')
|
|
|
+ String headerIcon = phase == 'start' ? 'rocket' : (result == 'SUCCESS' ? 'check_circle' : 'error')
|
|
|
+
|
|
|
+ def card = [
|
|
|
+ header: [
|
|
|
+ title: [
|
|
|
+ tag: "plain_text",
|
|
|
+ content: "Jenkins ${phase == 'start' ? '开始' : '结束'}通知"
|
|
|
+ ],
|
|
|
+ template: headerColor
|
|
|
+ ],
|
|
|
+ elements: [
|
|
|
+ [
|
|
|
+ tag: "div",
|
|
|
+ text: [
|
|
|
+ tag: "lark_md",
|
|
|
+ content: "**项目:** ${jobName}\n" +
|
|
|
+ "**分支:** ${branch}\n" +
|
|
|
+ "**构建:** #${buildNum}\n" +
|
|
|
+ "**结果:** ${result}\n" +
|
|
|
+ "**耗时:** ${duration}\n" +
|
|
|
+ "**链接:** [查看详情](${buildUrl})"
|
|
|
+ ]
|
|
|
+ ]
|
|
|
+ ]
|
|
|
+ ]
|
|
|
+
|
|
|
+ // 从 Jenkins 凭据里取机器人配置,避免硬编码
|
|
|
+ def robot = [
|
|
|
+ webhook: credentials('feishu-webhook'),
|
|
|
+ secret : credentials('feishu-secret')
|
|
|
+ ]
|
|
|
+
|
|
|
+ feishu.send(robot.webhook, robot.secret, card)
|
|
|
+}
|