复用GitHub工作流时出现‘Can't find action.yml’报错的原因咨询
GitHub工作流复用报错分析与解决
目录结构
.github └── workflows └── main.yml └── send_alerts.yml
main.yml 配置
jobs: main: steps: - name: Git Checkout uses: actions/checkout@v3 - name: some job run: | ...... send_alerts: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: ./.github/workflows/send_alerts.yml@feature/workflow1 with: provision_status: "Success"
send_alerts.yml 内容
name: Creating and Sending Alerts/Status on: workflow_call: provision_status: required: true type: string jobs: create_send_alerts: runs-on: ubuntu-latest steps: - name: Git Checkout uses: actions/checkout@v3 - name: Some other jobs run: | .....
报错信息
Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '/home/runner/work/git-repo/.github/workflows/send_alerts.yml@feature/workflow1'. Did you forget to run actions/checkout before running your local action?
用户问题
为什么调用send_alerts复用工作流时会报找不到action的错误?而main.yml中同样使用actions/checkout@v3却能正常工作?已尝试actions/checkout@v2和v3,均出现相同错误。
原因与解决方案
错误根源
你混淆了复用工作流(workflow_call)和本地Action的调用逻辑:
actions/checkout@v3是官方公共Action,这类Action是独立的仓库资源,GitHub会自动拉取对应代码执行,所以能正常工作。- 你把
send_alerts.yml(复用工作流)放在steps里,用本地Action的语法调用,GitHub会去指定路径找Action的定义文件(action.yml/yaml或Dockerfile),但这是工作流文件而非Action定义,因此触发找不到文件的报错。
正确的复用方式
复用工作流是job级别的复用,不需要嵌套在steps里,而是直接作为job的顶层配置:
jobs: main: steps: - name: Git Checkout uses: actions/checkout@v3 - name: some job run: | ...... send_alerts: # 直接用uses指向复用的工作流文件,无需steps包裹 uses: ./.github/workflows/send_alerts.yml@feature/workflow1 with: provision_status: "Success"
关键区别
- 复用工作流:通过
workflow_call定义,作为独立job调用,uses是job的顶层属性。 - Action:步骤级复用,必须放在
steps里,且必须包含action.yml/yaml或Dockerfile作为定义文件。
内容的提问来源于stack exchange,提问作者change198
相关产品推荐
相关产品推荐

