自定义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
相关产品推荐
相关产品推荐

