使用上下文从工作流程运行中获取作业 ID

Osc*_*r P 17 github-api github-actions

我有一个问题,当我想使用 yaml 文件中的 GitHub 上下文获取作业 id 时,它会返回一个字符串:

  - name: Test
    run: |
      sendEmail ${{github.job]}
Run Code Online (Sandbox Code Playgroud)

我得到这样的回应:

sendEmail Job_Test
Run Code Online (Sandbox Code Playgroud)

在 API 的 GitHub 文档中,它说了以下内容,这是一个整数字段: 在此输入图像描述

但是,在上下文文档中它说它是字符串: 在此输入图像描述

我的问题是,它是什么或者如何获取上下文来获取作业 id、整数值?

Grz*_*ski 14

没有直接的方法可以做到这一点 - 这些不是相同的值。

我知道的唯一解决方案是:

  1. 阅读github.job获取钥匙
  2. 使用 API 获取工作流程的作业列表:/repos/{owner}/{repo}/actions/runs/{run_id}/jobs
  3. 按名称查找工作并获取 int 值形式的 id

  • 不幸的是,如果作业包含矩阵策略,则无法找到正确的 ID。例如,job1 针对 ubuntu-latest 和 ubuntu-20.04 启动。在这两种情况下 github.job 都是 job1,但是为它们创建了两个单独的作业:/ (6认同)

t2d*_*t2d 5

有一个 GitHub 操作可以解决这个问题:https ://github.com/marketplace/actions/github-actions-job_id-parser

 - name: Get Current Job Log URL
    uses: Tiryoh/gha-jobid-action@v0
    id: jobs
    with:
      github_token: ${{ secrets.GITHUB_TOKEN }}
      job_name: ${{ github.job }}

- name: Output Current Job Log URL
  run: echo ${{ steps.jobs.outputs.html_url }}
Run Code Online (Sandbox Code Playgroud)


Luc*_*ães 5

此信息在 github 上下文级别中不可用,但是您可以使用唯一的作业信息(例如 runner.name)过滤掉它。通过这种方式,您可以获得任何情况下的作业 ID,包括矩阵。

  - name: Get Job ID from GH API
    id: get-job-id
    env:
      GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    run: |
      jobs=$(gh api repos/${{ github.repository }}/actions/runs/${{ github.run_id}}/attempts/${{ github.run_attempt }}/jobs)
      job_id=$(echo $jobs | jq -r '.jobs[] | select(.runner_name=="${{ runner.name }}") | .id')
      echo "job_id=$job_id" >> $GITHUB_OUTPUT

  - name: Display Job ID
    run: |
      echo Job ID: ${{ steps.get-job-id.outputs.job_id }}
      echo My full job URL is ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}/job/${{ steps.get-job-id.outputs.job_id }}
Run Code Online (Sandbox Code Playgroud)