GitHub Action推送Microsoft Teams通知异常问题求助
GitHub Action发送Teams失败通知无响应问题解决方案
问题根因
经排查问题由两处语法错误+一处上下文取值风险共同导致:
- 消息卡片JSON存在语法错误,导致失败场景下请求被Teams接口拒绝
- job状态在复合Action中存在上下文取值异常的风险
修复步骤
1. 修复自定义Action的JSON语法问题
修改.github/actions目录下的YAML文件两处代码:
- 将
activityTitle行的[${SHORT_SHA}](COMMIT_HTML_URL)改为[${SHORT_SHA}](${COMMIT_HTML_URL}),原代码将变量名写死为字符串,会破坏JSON结构 - 将case默认分支的
NOTIFICATION_ICON=❔""改为NOTIFICATION_ICON="❔",原代码多写的双引号会导致JSON字符串转义异常
2. 显式传递job状态到复合Action
避免复合Action上下文取值错误,修改自定义Action代码,在开头新增入参声明:
name: 'MS Notification' description: 'Notification to MS Teams' # 新增入参 inputs: job-status: description: 'Current job execution status' required: true runs: using: "composite" steps: - id: notify shell: bash run: | # 原有逻辑不变,仅修改case判断的变量 case ${{ inputs.job-status }} in # 原有case分支不变 esac # 剩余原有逻辑不变
3. 调整主工作流的Action调用逻辑
在两个job的Action调用处传入job状态参数:
# job1的通知步骤 - name: "testing_ms" if: always() uses: ./.github/actions with: job-status: ${{ job.status }} # job2的通知步骤 - name: "testing ms" if: always() uses: ./.github/actions with: job-status: ${{ job.status }}
4. 可选优化:确保job2不受上游job执行结果影响
如果希望无论job1执行成功/失败,job2都能正常运行触发通知,给job2新增if: always()配置:
job2: runs-on: ubuntu-latest needs: job1 if: always() # 新增该行 steps: # 原有步骤不变
验证方式
修复后重新触发工作流,失败场景下即可正常收到Teams通知,可在Action运行日志中查看curl返回的HTTP状态码和响应内容排查剩余问题。
内容的提问来源于stack exchange,提问作者Gaurav Sharma
相关产品推荐
相关产品推荐

