在其他仓库调用GitHub Action时如何访问Action所属仓库的文件?
GitHub Action 调用时YML文件读取问题解答
工作流是否会拉取被调用Action的仓库代码?
会。GitHub 执行工作流时,会自动将引用的自定义Action对应版本的全量仓库代码(所有提交到仓库、未被.gitignore忽略的文件)拉取到运行器本地,同时自动注入环境变量GITHUB_ACTION_PATH,指向当前运行的Action在本地的根目录。
你遇到的文件不存在报错,核心原因是路径写的不对:工作流运行时的默认工作目录是调用方(仓库B)的代码根目录,你脚本里写的相对路径(比如./config/xxx.yml)会默认从仓库B的目录下找文件,不会去Action自身的目录找,自然报不存在。
正确读取YML文件的配置方式
不需要额外做仓库权限、下载相关的配置,只需要修改脚本里的文件读取路径逻辑即可:
- 所有YML文件的路径,都基于
GITHUB_ACTION_PATH环境变量拼接绝对路径,不要用相对于执行入口的相对路径 - Node.js 脚本里的实现示例:
const fs = require('fs'); const yaml = require('js-yaml'); const path = require('path'); // 示例:YML文件存放在Action仓库的config文件夹下 const ymlFullPath = path.join(process.env.GITHUB_ACTION_PATH, 'config', 'task-rules.yml'); const ymlRaw = fs.readFileSync(ymlFullPath, 'utf8'); const config = yaml.load(ymlRaw);
- 额外注意:
@vercel/ncc只会打包JS依赖,不会把YML这类静态资源打包进输出的单文件,所以你必须把所有YML文件、打包生成的dist/index.js、action.yml元信息文件一起提交到仓库A,不要把YML文件加到.gitignore规则里,否则拉取下来的Action代码本身就缺失这些文件。
特殊场景下的替代方案
如果遇到私有仓库权限异常、路径匹配失效的问题,可以选择以下方案实现:
- 把固定不变的YML配置内容直接转为JS常量内嵌到脚本代码中,不需要额外做文件读取,适合配置很少改动的场景
- 在Action执行逻辑里显式拉取仓库A对应版本的代码到运行器临时目录,再读取对应YML文件,需要提前给工作流配置仓库A的读取权限
- 将YML文件路径/内容作为Action的入参,让调用方在仓库B的工作流配置里传入,适合需要支持调用方自定义配置的场景
内容的提问来源于stack exchange,提问作者noonenine
相关产品推荐
相关产品推荐

