我读过一些类似的帖子,但似乎没有人回答这个问题。如果我知道秘密的名称,我可以将单个 GitHub 秘密设置到操作中的环境变量中:
env:
PW_ID0007: "${{secrets.PW_ID0007}}"
如何在不知道其名称的情况下将所有秘密公开为环境变量(批量或以某种方式迭代它们并单独设置它们?)
有一种方法可以做到这一点。请检查这里
- name: view the secrets context
shell: bash
run: echo "$SECRETS_CONTEXT"
env:
SECRETS_CONTEXT: ${{ toJson(secrets) }}
这样你就会在不知道名字的情况下暴露所有秘密:
并且知道您需要的是使用例如 jq 来遍历此 json 并将它们设置为使用以下语法的 env 变量:
echo "variable_name=variable_value" >> $GITHUB_ENV
我为此创建了一个操作 - 获取所有秘密并将它们导出到环境变量中。
一个例子是:
- 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 }}
...
您可以将其转换为:
- uses: oNaiPs/secrets-to-env-action@v1
with:
secrets: ${{ toJSON(secrets) }}
- run: echo "Value of MY_SECRET1: $MY_SECRET1"
操作链接,其中包含有关配置的更多文档:https://github.com/oNaiPs/secrets-to-env-action
我想出了一个简单的解决方案,它也适用于多行字符串。以下是相应的 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
jq
获取 json 的每个键值对并生成以下形式的 env 命令:
{name}<<{delimiter}
{value}
{delimiter}
出于安全原因,分隔符
$EOF
是一个随机字符串。
然后将这些 env 命令附加到
$GITHUB_ENV
,以便它们在后续步骤中可用。