You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github Actions含Matrix配置时提前超时问题求助

问题:GitHub Actions多PHP版本Matrix工作流提前被取消

我配置了一个包含多PHP版本Matrix的GitHub Actions基准测试工作流,已设置timeout-minutes:10,但每个作业仅运行21秒就被取消;移除Matrix后,单PHP版本的工作流可正常完成。请问这是什么原因?

含Matrix的配置文件

name: Benchmark

on:
  push

jobs:
  benchmark:
    strategy:
      matrix:
        PHP_VERSION: [
          '4.4',
          '5.0', '5.1', '5.2', '5.3', '5.4', '5.5', '5.6',
          '7.1', '7.2', '7.3', '7.4',
          '8.0', '8.0jit', '8.1', '8.1jit', '8.2', '8.2jit'
        ]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: "Setup Docker and Git Repo"
        run: |
          git clone -b 1.0 --single-branch https://github.com/phpseclib/phpseclib.git
          if [[ "${{ matrix.PHP_VERSION }}" == "8"* ]]; then docker pull "quay.io/phpseclib/php${{ matrix.PHP_VERSION }}" && docker image tag "quay.io/phpseclib/php${{ matrix.PHP_VERSION }}" "phpseclib/php${{ matrix.PHP_VERSION }}"; else docker pull "phpseclib/php${{ matrix.PHP_VERSION }}"; fi
      - name: "Run Benchmark"
        run: |
          docker run -v "`pwd`:/opt/src" \
            -w "/opt/src" \
            "phpseclib/php${{ matrix.PHP_VERSION }}" \
            php test.php
    timeout-minutes: 10

作业日志

Cloning into 'phpseclib'...
Using default tag: latest
latest: Pulling from phpseclib/php4.4
2b15b7abe8b3: Pulling fs layer
292ae618967d: Pulling fs layer
71bbdbc9d3c1: Pulling fs layer
963fe8c066a2: Pulling fs layer
963fe8c066a2: Waiting
71bbdbc9d3c1: Verifying Checksum
71bbdbc9d3c1: Download complete
2b15b7abe8b3: Verifying Checksum
2b15b7abe8b3: Download complete
963fe8c066a2: Verifying Checksum
963fe8c066a2: Download complete
2b15b7abe8b3: Pull complete
292ae618967d: Verifying Checksum
292ae618967d: Download complete
292ae618967d: Pull complete
71bbdbc9d3c1: Pull complete
Error: The operation was canceled.

无Matrix的正常配置文件

name: Benchmark

on:
  push

jobs:
  benchmark:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: "Setup Docker and Git Repo"
        run: |
          git clone -b 1.0 --single-branch https://github.com/phpseclib/phpseclib.git
          docker pull "phpseclib/php7.4"
      - name: "Run Benchmark"
        run: |
          docker run -v "`pwd`:/opt/src" -w "/opt/src" "phpseclib/php7.4" php test.php
    timeout-minutes: 10

原因分析

  1. 并发作业超限:GitHub Actions对免费版仓库有并发作业限制,你的Matrix包含18个PHP版本,会同时启动18个作业,超出平台分配的并发配额,系统自动取消作业释放资源。
  2. 镜像拉取限流:短时间内批量拉取大量Docker镜像,会被Docker Hub或quay.io的限流机制拦截,导致拉取中断,触发工作流取消。
  3. 未设置并发控制:默认情况下Matrix会并行运行所有作业,无任何并发限制时,资源争抢会触发平台的终止机制。

解决办法

  • 限制并发数:在Matrix的strategy中添加max-parallel参数,控制同时运行的作业数量,比如设置为4:
    strategy:
      matrix:
        PHP_VERSION: [ ... ]
      max-parallel: 4
    
  • 优化镜像拉取:给镜像拉取命令添加重试逻辑,避免单次失败导致作业取消,比如:
    if [[ "${{ matrix.PHP_VERSION }}" == "8"* ]]; then 
      docker pull "quay.io/phpseclib/php${{ matrix.PHP_VERSION }}" || docker pull "quay.io/phpseclib/php${{ matrix.PHP_VERSION }}" || docker pull "quay.io/phpseclib/php${{ matrix.PHP_VERSION }}"
      docker image tag "quay.io/phpseclib/php${{ matrix.PHP_VERSION }}" "phpseclib/php${{ matrix.PHP_VERSION }}"
    else 
      docker pull "phpseclib/php${{ matrix.PHP_VERSION }}" || docker pull "phpseclib/php${{ matrix.PHP_VERSION }}" || docker pull "phpseclib/php${{ matrix.PHP_VERSION }}"
    fi
    
  • 拆分工作流:把PHP版本按大版本(如4.x/5.x、7.x、8.x)拆分成多个独立工作流,避免一次性启动过多作业。
  • 检查配额:在仓库的Actions设置页面查看当前并发配额,确认是否需要调整或升级。

内容的提问来源于stack exchange,提问作者neubert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 16:35:16