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

如何检测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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:25:05