GitHub Actions中secrets无法识别报错的解决求助
解决GitHub Actions中
Unrecognized named-value: 'secrets'错误的思路 问题核心
项目中自定义Action(.github/actions/create_envfile/action.yml)因配置结构错误+直接引用secrets,导致调用时触发Unrecognized named-value: 'secrets'报错,构建卡在调用该Action的步骤。
错误原因
- 自定义Action配置结构错误:原
action.yml写成了完整workflow格式(包含on、jobs字段),但自定义Action是被其他workflow调用的组件,不能包含这些字段,需按Action规范定义输入参数和执行逻辑。 - secrets访问权限限制:自定义Action内部无法直接读取仓库secrets,secrets的作用域仅在调用它的workflow/job层级,必须由调用方将secrets作为参数传递给Action。
解决步骤
1. 修正自定义Action的action.yml结构
将错误的workflow格式改成标准自定义Action配置,通过输入参数接收外部传递的值:
name: Create envfile description: Generate environment file from input parameters # 定义Action接收的输入参数 inputs: DEBUG: description: "Debug mode status" required: true default: "false" CLIENT_ID: description: "Client ID from repository secrets" required: true CLIENT_SECRET: description: "Client Secret from repository secrets" required: true DIRECTORY: description: "Directory to store the env file" required: true default: "projectName/" FILE_NAME: description: "Name of the environment file" required: true default: ".env" FAIL_ON_EMPTY: description: "Fail execution if any input is empty" required: false default: "false" # 定义Action的执行逻辑 runs: using: "composite" steps: - name: Generate env file uses: SpicyPizza/create-envfile@v1.3 with: envkey_DEBUG: ${{ inputs.DEBUG }} envkey_CLIENT_ID: ${{ inputs.CLIENT_ID }} envkey_CLIENT_SECRET: ${{ inputs.CLIENT_SECRET }} directory: ${{ inputs.DIRECTORY }} file_name: ${{ inputs.FILE_NAME }} fail_on_empty: ${{ inputs.FAIL_ON_EMPTY }}
2. 在主workflow中传递secrets给自定义Action
修改workflow.yml中调用自定义Action的步骤,通过with字段将仓库secrets作为参数传入:
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 # 修改此处,添加with参数传递secrets和其他配置 - uses: ./.github/actions/create_envfile with: DEBUG: false CLIENT_ID: ${{ secrets.CLIENT_ID }} CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }} DIRECTORY: projectName/ FILE_NAME: .env FAIL_ON_EMPTY: false - name: Set up Python version uses: actions/setup-python@v1 with: python-version: '3.8' # 后续步骤保持不变
关键说明
- 必须移除原
action.yml中的on、jobs字段,这些属于独立workflow的配置,自定义Action不需要。 - 所有外部传入的值(包括secrets)都要通过
inputs定义,再在执行步骤中引用inputs.xxx。 - 确保仓库已正确配置
CLIENT_ID和CLIENT_SECRET两个secrets(仓库Settings → Secrets and variables → Actions)。
内容的提问来源于stack exchange,提问作者ira
相关产品推荐
相关产品推荐

