如何在GitHub Actions中按指定次数重复运行任务?
在GitHub Actions中用输入参数控制任务重复执行次数
方法一:动态生成Matrix(推荐,支持并行执行)
GitHub Actions原生Matrix不支持直接用输入参数生成动态序列,但可以通过前置Job生成动态Matrix配置,再传递给执行Job:
- 定义工作流输入参数
amount-of-runs - 添加前置Job,用脚本生成包含1到指定次数的数组,输出为Matrix变量
- 实际执行Job引用这个动态生成的Matrix
完整配置示例:
name: 重复执行任务 on: workflow_dispatch: inputs: amount-of-runs: description: '任务重复执行次数' required: true type: number default: 5 runner-tag: description: '运行器标签' required: true type: string jobs: # 生成动态Matrix配置 generate-matrix: runs-on: ubuntu-latest outputs: reruns: ${{ steps.set-matrix.outputs.reruns }} steps: - id: set-matrix run: | # 生成从1到输入次数的数组 RERUNS=$(seq -s ',' 1 ${{ inputs.amount-of-runs }}) # 格式化为GitHub Actions接受的JSON数组 echo "reruns=[${RERUNS}]" >> $GITHUB_OUTPUT # 使用动态Matrix执行任务 run-repeated-task: needs: generate-matrix runs-on: ${{ inputs.runner-tag }} strategy: matrix: reruns: ${{ fromJSON(needs.generate-matrix.outputs.reruns) }} steps: - name: 执行重复任务 uses: actions/some-action with: # 可传递当前执行序号,不需要可忽略 node-version: ${{ matrix.reruns }}
方法二:步骤内串行循环(适合无需并行的场景)
如果不需要并行执行,可在单个Job的步骤里用循环实现,无需Matrix:
name: 串行重复执行任务 on: workflow_dispatch: inputs: amount-of-runs: description: '任务重复执行次数' required: true type: number default: 5 runner-tag: description: '运行器标签' required: true type: string jobs: run-repeated-task: runs-on: ${{ inputs.runner-tag }} steps: - name: 循环执行任务 run: | for i in $(seq 1 ${{ inputs.amount-of-runs }}); do echo "开始第 $i 次执行" # 替换为实际要执行的命令或逻辑 # 若需调用Action,建议用动态Matrix方案,循环内调用Action需额外处理失败逻辑 done
关键说明
- 动态Matrix方法支持并行执行,效率更高,适合大量重复场景(如200次)
- 串行循环方法配置简单,适合小次数、无需并行的场景
- 若不需要传递执行序号给Action,可直接去掉
matrix.reruns的引用,仅利用Matrix的重复执行特性
内容的提问来源于stack exchange,提问作者Sven van den Boogaart
相关产品推荐
相关产品推荐

