我正在尝试创建 jira 票证,然后在 GitHub 操作中使用 cURL 创建 Microsoft Teams 通知,包括票证引用,如下所示:
- name: Create Jira Ticket
id: create-ticket
run: |
echo === Create Jira Ticket ===
curl --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"}}}'
- name: Teams Notification with Jira Ticket ID
if: always() #&& steps.create-ticket.outcome == 'success'
run: |
echo === Create Teams Notification ===
curl -X POST -H "Content-Type: application/json" \
-d '{"text": "TICKET_DETAIL "}' \
${{ secrets.MSTEAMS_WEBHOOK }}
票据已成功创建,但我无法输出问题 ID 或密钥,该 ID 或密钥包含在 GitHub Action 的 cURL 输出中,如下所示:
Run echo === Create Jira Ticket ===
=== Create Jira Ticket ===
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 242 0 0 100 242 0 1168 --:--:-- --:--:-- --:--:-- 1169
100 344 0 102 100 242 86 206 0:00:01 0:00:01 --:--:-- 293
{"id":"XXXXX","key":"XXX-XXXX","self":"https://ORG.atlassian.net/rest/api/3/issue/XXXXX"}
我尝试将命令的输出分配给已定义的变量/GITHUB_OUTPUT/GITHUB_ENV,并使用多行方法。例如,以下多行尝试返回两个不同的错误:
run: |
{
echo "info=<<EOF"
curl --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"}}}'
echo "EOF"
} >> "$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响应中输出“id”:“XXXXX”或“key”:“XXX-XXXX”的值,以便它们可以替换Teams通知步骤中的TICKET_DETAIL,并实际出现在Teams通知中?
将
curl
的输出保存在变量中:
VAR_NAME=$(command-to-run)
然后使用这个变量打印到
$GITHUB_OUTPUT
- id: create-ticket
run: |
echo === Create Jira Ticket ===
RESULT=$(curl --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"}}}')
echo "result=$RESULT" >> "$GITHUB_OUTPUT"
- run: echo Result from the prev step: "${{ steps.create-ticket.outputs.result }}"
然后您可以使用
fromJSON()
读取响应的各个字段
- run: echo Ticket id: ${{ fromJSON(steps.create-ticket.outputs.result).id }}