GitHub 不允许将机密传递给可重用的工作流程

Posted

技术标签:

【中文标题】GitHub 不允许将机密传递给可重用的工作流程【英文标题】:GitHub does not allow secrets to be passed down to reusable workflow 【发布时间】:2022-01-15 00:51:32 【问题描述】:

我正在尝试将秘密传递给可重用的工作流程,如下所示: https://docs.github.com/en/actions/learn-github-actions/reusing-workflows#passing-inputs-and-secrets-to-a-reusable-workflow

但是流水线失败了,说明:

The workflow is not valid. .github/workflows/test.workflow-test.yml (Line: 17, Col: 9): Unexpected value 'secrets'

我的 .github/actions/test/action.yml 看起来像这样:

name: Reusable workflow example

on:
  workflow_call:
    inputs:
      username:
        required: true
        type: string
    secrets:
      token:
        required: true

jobs:
  example_job:
    name: show
    runs-on: ubuntu-latest
    steps:
      - name: show data
        runs: echo $ secrets.token 

我相应地称呼它:

name: Call a reusable workflow

on:
  push:
    branches:
      - "feature/workflow-test"

jobs:
  my-test-job:
    runs-on: ubuntu-20.04

    steps:
      - uses: actions/checkout@v1
      - uses: ./.github/actions/test
        with:
          username: John
        secrets:
          token: secret Token

我在这里缺少什么?它与 GitHub 文档中的代码示例几乎相同。

【问题讨论】:

Per docs.github.com/en/actions/learn-github-actions/… 一个步骤没有密钥。 【参考方案1】:

我可以从您的示例中看到两个问题。

可重用工作流的路径必须是.github/workflows。目前不支持子目录。

此外,您调用可重用工作流的方式不符合文档。

这是一个应该可以工作的例子:

name: Call a reusable workflow

on:
  workflow_dispatch:

jobs:
  reusable-job:
    uses: <owner>/<repo>/.github/workflows/<reusable workflow>@master
    with:
      username: john
    secrets:
      token: test

并遵循可重用的工作流程:

name: Reusable workflow

on:
  workflow_call:
    inputs:
      username:
        required: true
        type: string
    secrets:
      token:
        required: true

jobs:
  show:
    runs-on: ubuntu-latest
    steps:

      - name: Show data
        run: |
          echo $ inputs.username 
          echo $ secrets.token

【讨论】:

以上是关于GitHub 不允许将机密传递给可重用的工作流程的主要内容,如果未能解决你的问题,请参考以下文章

使用 Azure DevOps 构建管道将机密传递给容器时,Docker BuildKit 返回“/run/secrets/<secret-id>:没有这样的文件或目录”

使用 pyplot 绘制多个函数,将函数传递给函数,并重用代码

node-java 是不是允许将匿名函数作为参数传递给 java?

MSBuild 将参数传递给 CallTarget

如何将参数传递给 PhoneGap 数据库事务函数

如何将对象属性作为参数传递给 Razor 组件