如何将 cURL 命令的输出分配给 GitHub Actions 中的另一个命令?

问题描述 投票:0回答:1

我正在尝试创建 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通知中?

github-actions jira-rest-api
1个回答
0
投票

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 }}
© www.soinside.com 2019 - 2024. All rights reserved.