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

GitHub Actions中设置TMPDIR后创建临时目录遇EACCES权限错误

问题分析

你遇到的权限问题根源在于TMPDIR环境变量的作用域不对:你把它设置在了setup-node步骤的env里,这个变量只会在该步骤生效,后续执行测试的步骤并没有继承到这个变量,导致Node.js的tmpdir()依然返回系统默认的/tmp目录,而在GitHub Actions的Ubuntu runner环境中,直接通过mkdtempSync在/tmp下创建临时目录会触发权限限制。

解决方案

要让测试步骤能正确读取到TMPDIR,需要把环境变量配置在job级别或者测试步骤自身的env中:

方案1:配置在Job级别(推荐)

将环境变量放在job的顶层env中,这样该job下的所有步骤都能访问到:

name: Test

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      TMPDIR: ${{ runner.temp }}  # 移到job级别
    strategy:
      matrix:
        node-version: [22.x]
    steps:
    - uses: actions/checkout@v4
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
    - run: node --test src/**.test.js

方案2:配置在测试步骤中

如果只需要测试步骤使用这个变量,可以直接给测试步骤添加env:

# ... 其他配置不变 ...
    - run: node --test src/**.test.js
      env:
        TMPDIR: ${{ runner.temp }}
验证方法

可以在测试步骤前添加一个打印环境变量的步骤,确认TMPDIR是否正确设置:

- run: echo "当前TMPDIR: $TMPDIR"

当变量生效后,Node.js的tmpdir()会返回${{ runner.temp }}对应的路径(通常是/home/runner/work/_temp/xxxxxx),这个目录是GitHub Actions为当前运行提供的专属临时目录,你拥有完全的读写权限,不会再出现EACCES错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:35:10