cav*_*olp 5 github github-actions
我有工作流程 A 和 B,它们都调用工作流程 C。git 存储库中设置了许多秘密。工作流程 C 使用 100 个秘密。我需要以与工作流程 A 和 B 相同的方式传递其中的 99 个。但其中一个是不同的。我可以让工作流 C 继承所有秘密并仅覆盖其中之一吗?类似于: A:
name: Reusable workflow
on:
workflow_call:
inputs:
...
env:
SECRET_1: ${{ secrets.SECRET_1 }}
SECRET_2: ${{ secrets.SECRET_2 }}
...
SECRET_100: ${{ secrets.SECRET_100 }}
jobs:
...
Run Code Online (Sandbox Code Playgroud)
A:
name: Workflow A
on: ["workflow_dispatch"]
jobs:
C:
uses: ./.github/workflows/C.yaml
secrets:
- inherit
- SECRET_100: ${{ secrets.SECRET_100_FOR_A }}
jobs:
...
Run Code Online (Sandbox Code Playgroud)
乙:
name: Workflow B
on: ["workflow_dispatch"]
jobs:
C:
uses: ./.github/workflows/C.yaml
secrets:
- inherit
- SECRET_100: ${{ secrets.SECRET_100_FOR_B }}
jobs:
...
Run Code Online (Sandbox Code Playgroud)
我尝试阅读文档和谷歌搜索,并尝试在没有inherit
关键字的情况下显式传递每个秘密 - 但它的可扩展性不是很好。
迟到的回答,但也许会对某人有所帮助。这假设秘密值是在存储库中静态设置的,而不是动态生成的。
您可以将密钥名称作为可重用工作流程的输入传递,然后使用secrets
上下文和方括号中的密钥名称访问该密钥[]
- ${{ secrets[inputs.secret-name-input] }}
。这也可以保证秘密的安全,因为您只是以秘密的名义传递。
因此,在您的情况下,工作流程将像这样更新:
C:
name: Reusable workflow
on:
workflow_call:
inputs:
secret-100-name:
type: string
env:
SECRET_1: ${{ secrets.SECRET_1 }}
SECRET_2: ${{ secrets.SECRET_2 }}
...
SECRET_100: ${{ secrets[inputs.secret-100-name] }}
jobs:
...
Run Code Online (Sandbox Code Playgroud)
A:
name: Workflow A
on: ["workflow_dispatch"]
jobs:
C:
uses: ./.github/workflows/C.yaml
with:
secret-100-name: SECRET_100_FOR_A # DEFINE A SECRET IN THIS REPO NAMED `SECRET_100_FOR_A`
secrets: inherit
jobs:
...
Run Code Online (Sandbox Code Playgroud)
乙:
name: Workflow B
on: ["workflow_dispatch"]
jobs:
C:
uses: ./.github/workflows/C.yaml
with:
secret-100-name: SECRET_100_FOR_B # DEFINE A SECRET IN THIS REPO NAMED `SECRET_100_FOR_B`
secrets: inherit
jobs:
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
927 次 |
最近记录: |