onBuildEvent.groovy 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/env groovy
  2. /**
  3. * 在 pipeline 的开始 & 结束各调用一次即可:
  4. * onBuildEvent('start')
  5. * onBuildEvent('end')
  6. */
  7. def call(String phase) {
  8. // 从 Jenkins 环境变量里取值
  9. String jobName = env.JOB_NAME
  10. String buildNum = env.BUILD_NUMBER
  11. String branch = env.GIT_BRANCH ?: 'unknown'
  12. String result = currentBuild.currentResult ?: 'UNKNOWN'
  13. String buildUrl = env.BUILD_URL
  14. String duration = phase == 'end' ? "${currentBuild.durationString}" : '-'
  15. // 颜色 & 图标随结果变化
  16. String headerColor = phase == 'start' ? 'blue' : (result == 'SUCCESS' ? 'green' : 'red')
  17. String headerIcon = phase == 'start' ? 'rocket' : (result == 'SUCCESS' ? 'check_circle' : 'error')
  18. def card = [
  19. header: [
  20. title: [
  21. tag: "plain_text",
  22. content: "Jenkins ${phase == 'start' ? '开始' : '结束'}通知"
  23. ],
  24. template: headerColor
  25. ],
  26. elements: [
  27. [
  28. tag: "div",
  29. text: [
  30. tag: "lark_md",
  31. content: "**项目:** ${jobName}\n" +
  32. "**分支:** ${branch}\n" +
  33. "**构建:** #${buildNum}\n" +
  34. "**结果:** ${result}\n" +
  35. "**耗时:** ${duration}\n" +
  36. "**链接:** [查看详情](${buildUrl})"
  37. ]
  38. ]
  39. ]
  40. ]
  41. // 只读取 webhook 凭据,不处理 secret
  42. String webhook = credentials('feishu-webhook')
  43. feishu.send(webhook, card)
  44. }