GitHub Actions如何访问/home/runner/XXXXX路径下的文件
报错根因与路径说明
GitHub Action 执行actions/checkout拉取代码时的默认目录规则是固定的:
- 第一层路径
/home/runner/work/Orchestra是当前工作流分配的工作空间根目录,对应Action内置变量${{ github.workspace }} - 第二层路径
/home/runner/work/Orchestra/Orchestra是当前触发工作流的Orchestra仓库代码的默认存放位置
所以路径里出现两次Orchestra是正常的默认行为,不是配置错误。
你触发报错的核心原因是:用来执行合并操作的第三方私有仓库代码,被克隆到了其他目录,代码中写死的目录路径没有对齐Orchestra仓库内data文件夹的实际存放位置,导致os.listdir找不到目标路径。
直接修复步骤
按以下顺序调整配置即可让脚本正常读取data文件夹:
- 明确两个仓库的拉取路径,避免目录混淆
不要让两个仓库的代码拉到同一个目录下,在checkout步骤显式指定工具仓库的存放路径,参考配置:- name: 拉取Orchestra仓库代码 uses: actions/checkout@v4 # 无特殊配置时,会自动将代码拉到/home/runner/work/Orchestra/Orchestra路径下,你上传的data文件夹就在这个目录里 - name: 拉取合并用私有工具仓库 uses: actions/checkout@v4 with: repository: 你的组织名/合并工具仓库名 token: ${{ secrets.REPO_ACCESS_PAT }} # 拉取组织私有仓库需要配置有对应权限的个人访问令牌 path: ./merge_utils # 工具仓库单独存放到工作空间下的merge_utils子目录,和Orchestra自身代码隔离 - 不要在代码里写死data目录路径,运行脚本时显式传入绝对路径
相对路径很容易因为脚本执行位置变化出现寻址错误,执行合并脚本时直接通过参数传入data文件夹的绝对路径即可:
对应Python代码中,将- name: 执行文件合并 run: python ./merge_utils/merge.py --data-dir ${{ github.workspace }}/Orchestra/dataself.dir的赋值改为接收--data-dir传入的参数值即可,不需要写死任何路径。
备选数据访问方案
如果不想把data文件夹直接提交到Orchestra代码仓库,可以根据数据体积选择以下方案:
- 数据体积小于100MB时,可以将data文件夹打包后上传到Orchestra仓库的Release附件,工作流运行时通过内置
GITHUB_TOKEN拉取附件解压使用 - 小体积配置类数据,可以直接存放到仓库的Actions Secrets中,工作流运行时直接写入到目标目录即可
- 数据更新频率低时,可以直接将data文件夹放到合并工具仓库中,拉取工具仓库时会同步拉取数据,不需要跨目录寻址
- 数据体积较大时,可以直接将数据存放在目标OneDrive路径下,工作流启动后先拉取OneDrive上的原始数据到运行环境,合并完成后直接回传,不需要将数据存储在代码仓库中
内容的提问来源于stack exchange,提问作者LYH
相关产品推荐
相关产品推荐

