GitHub Actions:使用上下文设置工作目录无法找到文件
GitHub Actions 中 working-directory 用上下文/环境变量失效的解决办法
问题根源
GitHub Actions 的 working-directory 字段默认会把输入的路径拼接到 ${{ github.workspace }} 后面,当成相对路径处理。你调试出来的是完整绝对路径(/home/runner/work/REPO_NAME/REPO_NAME/actors/ACTOR_NAME),直接把这个绝对路径传给 working-directory 的话,最终实际访问的路径会变成 ${github.workspace}/绝对路径,这显然不存在,所以找不到文件。而你硬编码的 actors/ACTOR_NAME 是相对路径,和 workspace 拼接后正好是正确的绝对路径,所以能正常工作。
具体解决方案
1. 给环境变量存相对路径
把环境变量的值改成相对于 workspace 的路径(也就是 actors/ACTOR_NAME),直接在 working-directory 里引用即可:
env: ACTOR_DIR: actors/ACTOR_NAME jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build working-directory: ${{ env.ACTOR_DIR }} run: ls -la # 验证文件存在
2. 用 cd 命令替代 working-directory
如果必须保留绝对路径的变量,直接在 run 脚本里切换目录,绕开字段的路径解析逻辑:
env: ACTOR_ABS_PATH: /home/runner/work/REPO_NAME/REPO_NAME/actors/ACTOR_NAME jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build run: | cd ${{ env.ACTOR_ABS_PATH }} # 执行你的构建命令 npm install # 举个例子
3. 确认变量的赋值时机
如果你的变量是动态生成的(比如从步骤输出获取),要确保在引用 working-directory 前变量已经被正确赋值。比如用步骤输出传递:
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 动态设置路径 id: set_path run: echo "actor_dir=actors/ACTOR_NAME" >> $GITHUB_OUTPUT - name: Build working-directory: ${{ steps.set_path.outputs.actor_dir }} run: ls -la
快速调试方法
在出问题的步骤前加一个调试步骤,打印实际路径,确认是否符合预期:
- name: 调试路径 run: | echo "Workspace 路径: ${{ github.workspace }}" echo "预期工作目录: ${{ env.ACTOR_DIR }}" echo "实际拼接路径: ${{ github.workspace }}/${{ env.ACTOR_DIR }}" ls -la ${{ github.workspace }}/${{ env.ACTOR_DIR }}
内容的提问来源于stack exchange,提问作者andar1an
相关产品推荐
相关产品推荐

