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

使用GitHub可复用工作流时遭遇目录未找到错误的排查求助

GitHub可复用工作流工作区问题排查与修复

问题场景

尝试使用GitHub可复用工作流拆分任务:一个工作流负责Java项目的构建与测试,调用方工作流负责基于代码创建Docker镜像并推送到AWS ECR仓库。

可复用工作流(ci_resusable.yml)

name: "Java CI with Gradle"

on:
  workflow_call:

permissions:
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3

    - name: "Set up JDK 11"
      uses: actions/setup-java@v3
      with:
        java-version: '11'
        distribution: 'temurin'

    - name: "Build with Gradle"
      uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
      with:
        arguments: build

调用方工作流(Release.yml)

name: "Release"

on:
  release:
    types:
      - published

permissions:
  contents: read

jobs:
  ci:
    uses: ./.github/workflows/ci_resusable.yml

  push-images:
    runs-on: ubuntu-latest
    needs: ci

    - name: "Get tag name"
      id: get_tag_name
      run: |
        echo "::set-output name=tag_name::${{ github.ref_name}}"   

    - name: "Configure AWS credentials"
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_USER_ID }}
        aws-secret-access-key: ${{ secrets.AWS_USER_PASSWORD }}
        aws-region: us-east-1

    - name: "Login to Amazon ECR"
      id: login-ecr
      uses: aws-actions/amazon-ecr-login@v1
        

    - name: "Build, tag, and push image to Amazon ECR - stockapp-rest-adapter image"
      env:
        ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
        ECR_REPOSITORY: stockapp-rest-adapter
        IMAGE_TAG: ${{ steps.get_tag_name.outputs.tag_name }}
      run: |
        pwd
        cd stockapp-rest-adapter
        docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
        docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG

当前问题:执行cd stockapp-rest-adapter时提示目录不存在,疑似仓库未被检出;疑问:这些Job是否运行在同一个Runner并共享工作区?


问题解答

核心结论:不同Job完全独立,不共享Runner和工作区

GitHub Actions中每个Job都会启动全新的Runner实例,各自拥有独立的工作目录和运行环境,完全不会共享任何文件或状态。哪怕两个Job的runs-on配置相同,也只是使用同类型的Runner,而非同一个实例。

错误点分析

  1. push-images Job缺少代码检出步骤
    ci Job的可复用工作流里执行了actions/checkout@v3,但这只会把代码拉取到ci Job对应的Runner工作区中。push-images作为独立任务,未执行任何代码检出操作,当前工作目录为空,自然找不到stockapp-rest-adapter目录。

  2. push-images Job的步骤格式错误
    提供的代码里push-images的步骤没有缩进在steps:下,会导致GitHub Actions解析失败,必须修正格式。

修正后的push-images Job代码

push-images:
  runs-on: ubuntu-latest
  needs: ci
  steps:
    - name: "Checkout code"
      uses: actions/checkout@v3

    - name: "Get tag name"
      id: get_tag_name
      run: |
        echo "::set-output name=tag_name::${{ github.ref_name}}"   

    - name: "Configure AWS credentials"
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_USER_ID }}
        aws-secret-access-key: ${{ secrets.AWS_USER_PASSWORD }}
        aws-region: us-east-1

    - name: "Login to Amazon ECR"
      id: login-ecr
      uses: aws-actions/amazon-ecr-login@v1
        

    - name: "Build, tag, and push image to Amazon ECR - stockapp-rest-adapter image"
      env:
        ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
        ECR_REPOSITORY: stockapp-rest-adapter
        IMAGE_TAG: ${{ steps.get_tag_name.outputs.tag_name }}
      run: |
        pwd
        cd stockapp-rest-adapter
        docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
        docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG

补充说明

如果Docker构建需要用到ci Job生成的构建产物(如Jar包),仅靠代码检出还不够,需要通过工作流 artifacts 传递产物:

  1. 在可复用工作流的build Job末尾添加上传步骤:
    - name: Upload build artifacts
      uses: actions/upload-artifact@v3
      with:
        name: build-output
        path: stockapp-rest-adapter/build/libs/
    
  2. 在push-images Job中添加下载步骤(放在checkout之后):
    - name: Download build artifacts
      uses: actions/download-artifact@v3
      with:
        name: build-output
        path: stockapp-rest-adapter/build/libs/
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:14:54