GitHub Actions工作流拆分疑问:Runner分配与内存共享问题
GitHub Actions自托管Runner多工作流问题解答
核心问题解答
1. 每个工作流文件是否会在独立的Runner中运行?
- 不一定会用到不同的物理/虚拟Runner机器,但每个工作流的执行是完全独立的单元:
- 若你的自托管Runner只有一台,多个工作流会按队列依次在这台Runner上执行(Runner空闲时承接下一个任务);若有多台Runner,GitHub会自动分配空闲Runner执行工作流。
- 无论是否在同一台Runner上,每个工作流的执行环境都是隔离的:默认情况下,Runner会在每次任务执行前清理工作目录,且每个工作流的进程、环境变量完全独立,不会和其他工作流的执行产生交叉影响。
2. 这些工作流是否共享内存?
- 完全不共享。每个工作流的执行都是独立的进程(或容器,若配置了容器化运行),内存空间完全隔离,彼此无法访问对方的内存数据。即使在同一台自托管Runner上运行,不同工作流的内存也互不干扰。
你的Workflow拆分实践方案
针对你当前的构建+产物打包流程,拆分到独立工作流文件的具体实现如下:
工作流1:build.yml(负责核心构建)
name: "Build Pipeline" run-name: ${{ github.actor }} 触发构建任务 on: schedule: - cron: "0 2 * * *" push: branches-ignore: - "docs/*" tags: - "v*" workflow_dispatch: inputs: cc_platform: description: "输入要构建的分支名称" required: true default: "dev" jobs: build: runs-on: self-hosted name: 代码构建 steps: - name: 拉取仓库代码 uses: actions/checkout@v3 - name: 配置SSH凭证 uses: webfactory/ssh-agent@v0.6.0 with: ssh-private-key: ${{ secrets.SSH_KEY_CC }} - name: 创建配置文件 run: touch conf - name: 清理旧文件并执行构建脚本 run: | if [[ -d "my_folder" ]]; then rm -rf my_folder; fi ./build - name: 上传构建产物作为中间Artifact uses: actions/upload-artifact@v3 with: name: build_art_${{ github.sha }} path: | .*.rootfs.wic.xz .*.rootfs.manifest if-no-files-found: error
工作流2:generate-artifact.yml(负责产物处理/分发)
通过workflow_run触发,在build.yml执行成功后自动启动:
name: "Final Artifact Generation" run-name: 处理构建产物 on: workflow_run: workflows: ["Build Pipeline"] types: - completed jobs: process-artifact: runs-on: self-hosted if: ${{ github.event.workflow_run.conclusion == 'success' }} name: 产物处理 steps: - name: 下载构建产物 uses: actions/download-artifact@v3 with: name: build_art_${{ github.event.workflow_run.head_sha }} path: ./artifacts # 此处可添加自定义产物处理步骤,比如文件重命名、签名、上传至第三方存储服务等 - name: 示例:验证产物文件 run: | ls -la ./artifacts
内容的提问来源于stack exchange,提问作者Payam30
相关产品推荐
相关产品推荐

