You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub Actions中提取cURL输出的Jira工单信息用于Teams通知?

解决GitHub Actions中提取Jira工单ID并发送Teams通知的问题

问题场景

在GitHub Actions中通过cURL创建Jira工单后,需要将工单的ID或Key插入到Microsoft Teams通知中,但无法正确提取cURL响应中的字段,之前尝试的多行写入GITHUB_OUTPUT的方式报错:

Error: Unable to process file command 'output' successfully.
Error: Invalid format '{"id":"XXXXX","key":"XXX-XXXX","self":"https://ORG.atlassian.net/rest/api/3/issue/XXXXX"}EOF'

解决方案

核心是关闭cURL进度输出,并用jq解析JSON响应,将需要的字段写入GitHub Actions的输出变量,后续步骤直接引用这些变量即可。

1. 修改Jira工单创建步骤

更新Create Jira Ticket步骤,添加cURL静默参数、解析JSON并输出变量:

- name: Create Jira Ticket
  id: create-ticket
  run: |
    echo === Create Jira Ticket ===
    # 用-s关闭cURL进度输出,避免干扰JSON解析
    RESPONSE=$(curl -s --request POST \
      --url 'https://ORG.atlassian.net/rest/api/3/issue' \
      --header 'Authorization: Basic ENCODED_STRING' \
      --header 'Accept: application/json' \
      --header 'Content-Type: application/json' \
      --data '{"fields":{"project":{"key": "KEY"},"summary": "TEST_TICKET","description": {"type": "doc","version": 1,"content": [{"type": "paragraph","content": [{"text": "CREATING_TEST_TICKET","type": "text"}]}]},"issuetype": {"name": "Task"}}}')
    
    # 用jq提取id和key,写入GITHUB_OUTPUT
    echo "jira_id=$(echo "$RESPONSE" | jq -r '.id')" >> $GITHUB_OUTPUT
    echo "jira_key=$(echo "$RESPONSE" | jq -r '.key')" >> $GITHUB_OUTPUT
    echo "jira_url=$(echo "$RESPONSE" | jq -r '.self')" >> $GITHUB_OUTPUT

说明:-s参数会禁用cURL的进度条输出,确保响应只有纯JSON;jq -r用于提取原始字符串(不带引号)的字段值。

2. 更新Teams通知步骤

在Teams通知中引用之前步骤输出的变量,替换TICKET_DETAIL:

- name: Teams Notification with Jira Ticket ID
  if: steps.create-ticket.outcome == 'success' # 仅在工单创建成功时发送
  run: |
    echo === Create Teams Notification ===
    curl -X POST -H "Content-Type: application/json" \
    -d '{
      "text": "Jira工单已创建:ID: ${{ steps.create-ticket.outputs.jira_id }},Key: ${{ steps.create-ticket.outputs.jira_key }},链接: ${{ steps.create-ticket.outputs.jira_url }}"
    }' \
    ${{ secrets.MSTEAMS_WEBHOOK }}

关键注意事项

  • 确保GitHub Runner环境已安装jq(大多数官方Runner默认已包含),如果是自定义Runner,需要提前安装jq。
  • 建议移除if: always(),改为仅在工单创建成功时发送通知,避免创建失败时发送无效信息(可根据实际需求调整)。
  • 之前的EOF写法错误原因:cURL的进度输出混入了响应内容,且echo "EOF"直接拼接在JSON后,导致GITHUB_OUTPUT格式不符合要求,用变量存储响应+jq解析是更可靠的方式。

内容的提问来源于stack exchange,提问作者Andrew Thompson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 12:58:15