如何在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
相关产品推荐
相关产品推荐

