|
| 1 | +# 钉钉消息发送模版任务 |
| 2 | +# 必须变量 |
| 3 | +# DINGTALK_ACCESS_TOKEN 群机器人token |
| 4 | + |
| 5 | +variables: |
| 6 | + # 钉钉markdown换行符 必须\n且前后跟两个空格(shell 转义) |
| 7 | + V_BR: "\ \ \\n\ \ " |
| 8 | + |
| 9 | +# 消息发送准备工作 |
| 10 | +# 检测钉钉消息发送access_token是否存在 |
| 11 | +.prepare: &prepare |
| 12 | + # token检验 |
| 13 | + - | |
| 14 | + if [ -z $DINGTALK_ACCESS_TOKEN ]; then |
| 15 | + echo "使用钉钉消息发送必须配置DINGTALK_ACCESS_TOKEN变量" |
| 16 | + exit 1 |
| 17 | + fi |
| 18 | + - | |
| 19 | + if [ -z $DINGTALK_SECURITY_VALUE ]; then |
| 20 | + echo "使用钉钉消息发送必须配置DINGTALK_SECURITY_VALUE变量" |
| 21 | + exit 1 |
| 22 | + fi |
| 23 | + # url编码项目地址及任务地址 |
| 24 | + - | |
| 25 | + project_url="$(curl -s -o /dev/null -w %{url_effective} --get --data-urlencode "${GITLAB_URL}/${CI_PROJECT_PATH}/-/tree/${CI_BUILD_REF_NAME}" "" || true)" |
| 26 | + job_url="$(curl -s -o /dev/null -w %{url_effective} --get --data-urlencode "${GITLAB_URL}/${CI_PROJECT_PATH}/-/jobs/${CI_JOB_ID}" "" || true)" |
| 27 | +
|
| 28 | +# 钉钉消息发送http Anchors |
| 29 | +.send_request: &send_request |
| 30 | + # Markdown消息内容 |
| 31 | + - | |
| 32 | + V_TEXT="**CI任务<font color=\\\"${V_COLOR}\\\">${V_STATUS}</font>通知**${V_BR}\ |
| 33 | + 任务ID: **${CI_JOB_ID}**${V_BR}\ |
| 34 | + 任务名: **${CI_JOB_NAME}**${V_BR}\ |
| 35 | + 项目: **${CI_PROJECT_PATH}**${V_BR}\ |
| 36 | + 分支: **${CI_BUILD_REF_NAME}**${V_BR}\ |
| 37 | + 执行人: **${GITLAB_USER_NAME}**\ |
| 38 | + " |
| 39 | + # 钉钉消息发送json报文 |
| 40 | + - | |
| 41 | + V_JSON="{ |
| 42 | + \"actionCard\": {\ |
| 43 | + \"title\": \"${V_TITLE}\",\ |
| 44 | + \"text\": \"${V_TEXT}\", \ |
| 45 | + \"btnOrientation\": \"1\",\ |
| 46 | + \"btns\": [{\ |
| 47 | + \"title\": \"查看项目\", |
| 48 | + \"actionURL\": \"dingtalk://dingtalkclient/page/link?url=${project_url##/?}&pc_slide=false\" |
| 49 | + }, {\ |
| 50 | + \"title\": \"查看任务\", |
| 51 | + \"actionURL\": \"dingtalk://dingtalkclient/page/link?url=${job_url##/?}&pc_slide=false\" |
| 52 | + }]\ |
| 53 | + },\ |
| 54 | + \"msgtype\": \"actionCard\"\ |
| 55 | + }" |
| 56 | + - > |
| 57 | + curl -s -H 'Content-Type: application/json; charset=utf-8' -X POST |
| 58 | + https://oapi.dingtalk.com/robot/send?access_token=${DINGTALK_ACCESS_TOKEN} -d "${V_JSON}" -w "\n" |
| 59 | +
|
| 60 | +# 消息发送模板任务 |
| 61 | +.pre: |
| 62 | + stage: .pre |
| 63 | + image: curlimages/curl:7.86.0 |
| 64 | + script: |
| 65 | + - *prepare |
| 66 | + - | |
| 67 | + V_COLOR="#FF9900" |
| 68 | + V_STATUS="启动" |
| 69 | + V_TITLE="CI任务启动通知" |
| 70 | + - echo "GITLAB_CI_STATUS=FAIL" >> build.env |
| 71 | + - *send_request |
| 72 | + artifacts: |
| 73 | + reports: |
| 74 | + dotenv: build.env |
| 75 | + |
| 76 | +.post: |
| 77 | + stage: .post |
| 78 | + image: curlimages/curl:7.86.0 |
| 79 | + # 发送ci结束消息 |
| 80 | + script: |
| 81 | + - *prepare |
| 82 | + # 不同任务状态设置不同消息标题、颜色 |
| 83 | + - | |
| 84 | + case $GITLAB_CI_STATUS in |
| 85 | + ALL_SUCCESS) |
| 86 | + V_TITLE="CI任务执行成功通知" |
| 87 | + V_STATUS="执行成功" |
| 88 | + V_COLOR="#33CC00" |
| 89 | + ;; |
| 90 | + FAIL) |
| 91 | + V_TITLE="CI任务执行失败通知" |
| 92 | + V_STATUS="执行失败" |
| 93 | + V_COLOR="#FF3333" |
| 94 | + ;; |
| 95 | + *) |
| 96 | + echo "不支持job状态$GITLAB_CI_STATUS" |
| 97 | + exit 1 |
| 98 | + ;; |
| 99 | + esac |
| 100 | + # 执行耗时计算 |
| 101 | + - *send_request |
0 commit comments