如何在作业中获取 GitHub Actions 矩阵作业名称?

l0b*_*0b0 7 github-actions

我正在尝试为矩阵中的每个失败作业单独上传日志。每组日志都需要有一个基于作业矩阵的名称,否则它们会互相破坏,我无法分辨生成的工件来自哪个作业。

我尝试打印所有上下文:

name: My workflow
on:
  pull_request:
    types: [opened, synchronize]
jobs:
  my-job:
    name: OS ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os:
          - ubuntu-18.04
          - ubuntu-20.04
    steps:
      - run: echo "${{ toJSON(github) }}"
      - run: echo "${{ toJSON(env) }}"
      - run: echo "${{ toJSON(job) }}"
      - run: echo "${{ toJSON(steps) }}"
      - run: echo "${{ toJSON(runner) }}"
      - run: echo "${{ toJSON(secrets) }}"
      - run: echo "${{ toJSON(strategy) }}"
      - run: echo "${{ toJSON(matrix) }}"
      - run: echo "${{ toJSON(needs) }}"
      - run: echo "${{ toJSON(inputs) }}"
Run Code Online (Sandbox Code Playgroud)

这些都不包含运行工作流时显示的作业名称。

Gui*_*urd 5

目前无法jobs.<job_id>.name直接从 Github 上下文中提取。

job_name还没有本地方法(还?)从运行器上下文中提取,只有job_id(使用${{ github.job }})。

因此,您的(标题)问题的答案是,如果没有解决方法,使用或不使用矩阵都是不可能的。

注意:您可以在此处此处找到有关同一问题的其他一些主题


在您的情况下,当您使用 来matrix定义作业名称时,实际上可以在工作流程中以与 env 变量相同的方式设置作业名称(如果您愿意),执行以下解决方法:

jobs:
  my-job:
    name: OS ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os:
          - ubuntu-18.04
          - ubuntu-20.04
    steps:
      - run: echo ${{ github.job }} # Will only return the job_id: "my-job"
      - run: |
          JOB_NAME="OS ${{ matrix.os }}"
          echo $JOB_NAME
          echo "JOB_NAME=$JOB_NAME" >> $GITHUB_ENV

      - name: Print JOB_NAME
        run: |
          echo "JOB NAME:" ${{ env.JOB_NAME }}
Run Code Online (Sandbox Code Playgroud)

我在这里测试过,如果你想看一下。

这样,JOB_NAME环境变量就可以在任何步骤中使用(如果您想将其用作日志文件名),甚至可以保存为输出以在顺序作业中使用。

创建日志文件时,您可以将timestamp或工作流程run_id( ${{ github.run_id }}) 添加到JOB_NAME日志文件名中,以便在上传时识别是哪个工作流程生成的。