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

自定义GitHub Action传递密钥报错,如何安全实现密钥传递?

解决方法

你的报错原因是:GitHub Actions工作流的步骤中不存在secrets这个顶级配置字段,调用自定义Action时不能这么写。以下是两种正确的安全传递密钥的方式,根据你的Action类型选择:

方式1:如果是复合Action(Composite Run Steps Action)

复合Action无法在action.yml中声明secrets字段,需要改用inputs接收密钥,GitHub会自动识别并隐藏敏感输入值:

1. 修改自定义Action的action.yml

将原来的secrets声明改为inputs,可添加secret: true标记明确这是敏感数据:

inputs:
  something:
    description: "Some input parameter"
    required: true
  MY_SECRET:
    description: "A secret that this action needs"
    required: true
    secret: true # 标记为敏感输入,GitHub会自动隐藏日志中的值

runs:
  using: "composite"
  steps:
    - name: Use the secret
      run: echo "My secret is ${{ inputs.MY_SECRET }}"
      shell: bash

2. 修改工作流的调用步骤

把密钥作为with参数传递,无需单独的secrets块:

- name: test my action
  uses: MyOrg/my-repo/.github/actions/my_action@main
  with:
    something: someinput
    MY_SECRET: ${{ secrets.MY_SECRET }}

方式2:如果是Docker容器Action或JavaScript Action

这类Action可以在action.yml中声明secrets字段,调用时通过env环境变量传递密钥:

1. 保留自定义Action的action.yml声明

你的原有声明是正确的:

secrets:
  MY_SECRET:
    description: A secret that this action needs
    required: true

# 其他配置示例(Docker Action)
runs:
  using: "docker"
  image: "Dockerfile"

2. 修改工作流的调用步骤

将密钥通过env字段传递,Action内部可直接读取环境变量:

- name: test my action
  uses: MyOrg/my-repo/.github/actions/my_action@main
  with:
    something: someinput
  env:
    MY_SECRET: ${{ secrets.MY_SECRET }}

关键注意事项

  • 无论哪种方式,GitHub都会自动隐藏${{ secrets.* }}引用的值,不会在日志中泄露。
  • 确保仓库/组织已在「Settings -> Secrets and variables -> Actions」中正确配置MY_SECRET密钥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:44:51