如何检测GitHub Actions运行器运行于Ubuntu还是Windows环境
检测GitHub Actions运行器宿主操作系统类型的方法
GitHub Actions 原生提供了开箱即用的运行器系统识别能力,不需要额外编写系统探测逻辑,常用方案分两类:
1. Workflow 编排层直接用内置上下文
GitHub Actions 运行时会自动注入runner上下文,其中runner.os字段直接返回当前运行器的真实操作系统类型,返回值固定为三类:
- Ubuntu 环境返回
Linux - Windows 环境返回
Windows - macOS 环境返回
macOS
这个字段可以直接在workflow的条件判断、参数拼接场景使用,不需要额外跑命令,示例:
jobs: build: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest] steps: - name: Ubuntu 专属步骤 if: runner.os == 'Linux' run: echo "当前运行在Ubuntu运行器" - name: Windows 专属步骤 if: runner.os == 'Windows' run: echo "当前运行在Windows运行器"
注意:这个值是runner程序启动时自动上报的底层系统信息,哪怕是自托管运行器配置了自定义标签,也不会篡改这个字段的结果,比解析
runs-on标签的方案可靠性高很多。
2. 脚本运行时读取自动注入的环境变量
如果是在step内执行的脚本(Shell、Node.js、Python等任意语言环境)中需要判断系统类型,GitHub会自动把对应的值注入为全大写的环境变量RUNNER_OS,不需要手动在workflow里配置环境变量,直接读取即可:
- Bash/Zsh 等类Unix Shell:读取
$RUNNER_OS - PowerShell:读取
$env:RUNNER_OS - Node.js:除了原生的
process.platform,也可以直接读process.env.RUNNER_OS,返回值和上下文完全一致 - Python:读取
os.getenv("RUNNER_OS")即可
Node.js环境使用示例:
const runnerOS = process.env.RUNNER_OS; if (runnerOS === 'Linux') { console.log('当前运行在Ubuntu环境'); } else if (runnerOS === 'Windows') { console.log('当前运行在Windows环境'); }
内容的提问来源于stack exchange,提问作者Mathew
相关产品推荐
相关产品推荐

