如何将所有 GitHub 机密放入环境变量中以供操作访问(在我的例子中是 powershell)?

mm_*_*sml 16 github environment-variables github-actions github-secret

我读过一些类似的帖子,但似乎没有人回答这个问题。如果我知道秘密的名称,我可以将单个 GitHub 秘密设置到环境变量中: env: PW_ID0007: "${{secrets.PW_ID0007}}" 如何在不知道秘密名称的情况下将所有秘密公开为环境变量(或者批量或以某种方式迭代它们并单独设置它们?)

Krz*_*tof 14

有一种方法可以做到这一点。请检查这里

- name: view the secrets context
  shell: bash
  run: echo "$SECRETS_CONTEXT"
  env:
    SECRETS_CONTEXT: ${{ toJson(secrets) }}
Run Code Online (Sandbox Code Playgroud)

这样你就可以在不知道名字的情况下暴露所有秘密:

在此输入图像描述

并知道您需要的是使用例如 jq 来遍历此 json 并将它们设置为使用以下语法的 env 变量:

 echo "variable_name=variable_value" >> $GITHUB_ENV
Run Code Online (Sandbox Code Playgroud)


小智 9

我正是为此创建了一个操作 - 获取所有秘密并将它们导出到环境变量中。

一个例子是:

- run: echo "Value of MY_SECRET1: $MY_SECRET1"
  env:
    MY_SECRET1: ${{ secrets.MY_SECRET1 }}
    MY_SECRET2: ${{ secrets.MY_SECRET2 }}
    MY_SECRET3: ${{ secrets.MY_SECRET3 }}
    MY_SECRET4: ${{ secrets.MY_SECRET4 }}
    MY_SECRET5: ${{ secrets.MY_SECRET5 }}
    MY_SECRET6: ${{ secrets.MY_SECRET6 }}
    ...
Run Code Online (Sandbox Code Playgroud)

您可以将其转换为:

- uses: oNaiPs/secrets-to-env-action@v1
  with:
    secrets: ${{ toJSON(secrets) }}
- run: echo "Value of MY_SECRET1: $MY_SECRET1"
Run Code Online (Sandbox Code Playgroud)

链接到该操作,其中包含有关配置的更多文档: https: //github.com/oNaiPs/secrets-to-env-action


man*_*man 5

我想出了一个简单的解决方案,它也适用于多行字符串。以下是相应的 GitHub 操作步骤:

- name: Expose github environment as shell variables
  env:
    SECRETS_CONTEXT: ${{ toJson(secrets) }}
    VARS_CONTEXT: ${{ toJson(vars) }}
  run: |
    # https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-an-environment-variable
    # https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings
    EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
    to_envs() { jq -r "to_entries[] | \"\(.key)<<$EOF\n\(.value)\n$EOF\n\""; }
    echo "$VARS_CONTEXT" | to_envs >> $GITHUB_ENV
    echo "$SECRETS_CONTEXT" | to_envs >> $GITHUB_ENV
Run Code Online (Sandbox Code Playgroud)

jq获取 json 的每个键值对并生成以下形式的 env 命令:

{name}<<{delimiter}
{value}
{delimiter}
Run Code Online (Sandbox Code Playgroud)

出于安全原因,分隔符$EOF是随机字符串。

然后将这些 env 命令附加到$GITHUB_ENV,以便它们在后续步骤中可用。