我正在尝试为矩阵中的每个失败作业单独上传日志。每组日志都需要有一个基于作业矩阵的名称,否则它们会互相破坏,我无法分辨生成的工件来自哪个作业。
我尝试打印所有上下文:
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)
这些都不包含运行工作流时显示的作业名称。
目前无法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日志文件名中,以便在上传时识别是哪个工作流程生成的。
| 归档时间: |
|
| 查看次数: |
7142 次 |
| 最近记录: |