Pur*_*ome 5 command-line-interface jq github-actions
我正在尝试在 GitHub 操作中提取 HTTP 请求的值,然后在另一个步骤中使用该值。
这是当前的代码:
- run: call some https endpoint
Run Code Online (Sandbox Code Playgroud)
然后返回到控制台输出:
{
"authorizationToken": "<snip>",
"expiration": "2021-02-26T18:18:38+00:00"
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试提取该authorizationToken值,然后在下一步中使用它,例如
-name: Get auth token
run: call some https endpoint
-name: set something which uses the token
run: set blah --token $token_from_previous_step
Run Code Online (Sandbox Code Playgroud)
~ - run: call some https endpoint | echo "jq '.authorizationToken'"~
Run Code Online (Sandbox Code Playgroud)
其中错误:
jq '.authorizationToken'
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
BrokenPipeError: [Errno 32] Broken pipe
Run Code Online (Sandbox Code Playgroud)
我现在可以提取键/值..但不确定如何将其设置为环境变量,以便在其他步骤中使用。
这有效:
- run: call some https endpoint > at.json
- run: jq '.authorizationToken' at.json
Run Code Online (Sandbox Code Playgroud)
这样就可以从该 https 端点结果获取 json 输出,并将结果保存到名为at.json(即上面的 json 文本)的文件中。
接下来,我运行该jq命令,提取该authorizationToken值。这有效!
现在我需要将此值设置为环境变量。阅读有关此的文档,看起来可以完成,但我不确定如何调用jq并将键/值设置到环境变量中。
我觉得我需要做这样的事情:
- run: echo "AUTH_TOKEN=run the jq command here" >> $GITHUB_ENV
Run Code Online (Sandbox Code Playgroud)
像这样的事情(完全失败):
- run: echo "AUTH_TOKEN=${{ jq '.authorizationToken' at.json }}" >> $GITHUB_ENV
Run Code Online (Sandbox Code Playgroud)
ITC*_*hap 13
我将在这里添加更多解决方案。就像您自己发现的那样,您可以将其作为环境变量传递:
steps:
- run: |
token=$( callEndpoint | jq '.authorizationToken' )
echo "AUTH_TOKEN=$token" >> "$GITHUB_ENV"
- run: echo "$AUTH_TOKEN"
Run Code Online (Sandbox Code Playgroud)
您还可以使用步骤输出:
steps:
- id: get-token
run: |
token=$( callEndpoint | jq '.authorizationToken' )
echo "::set-output name=auth_token::$token"
- run: echo ${{ steps.get-token.outputs.auth_token }}
Run Code Online (Sandbox Code Playgroud)
这两种解决方案都适用于在同一作业的步骤之间传递值。
如果需要在不同作业的步骤之间传递值,可以使用作业输出:
jobs:
job-a:
runs-on: ubuntu-latest
outputs:
auth_token: ${{ steps.get-token.outputs.auth_token }}
steps:
- id: get-token
run: |
token=$( callEndpoint | jq '.authorizationToken' )
echo "::set-output name=auth_token::$token"
job-b:
runs-on: ubuntu-latest
needs: job-a
steps:
- run: echo ${{ needs.job-a.outputs.auth_token }}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23638 次 |
| 最近记录: |