为什么操作无法访问机密?
Why The Action Cannot Access Secrets?
我正在尝试创建工作流以使用 Github 操作将 Nuget 包部署到 Github 包存储库。
在这种情况下,
- 存储库在组织内部
- 我是那个组织的所有者
- 我有存储库的管理员权限
- 存储库中列出了秘密
- 提交是我的
- 提交是对分支的直接提交
但操作无法访问机密
以下是我尝试执行的工作流程
name: Build and Publish
on:
push:
branches:
- gh-packages
jobs:
build_and_publish:
env:
ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
name: Publish Packages to NuGet
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-dotnet@v1
with:
dotnet-version: "3.0.100"
- name: Dump Github Context
env:
CONTEXT: ${{ toJson(github) }}
SECRETS: ${{ toJson(secrets) }}
TOK: ${{ secrets.ACCESS_TOKEN }}
TEST: ${{ secrets.TEST }
run: |
echo $ACCESS_TOKEN
echo $TOK
echo $TEST
echo $GITHUB_TOKEN
echo "$SECRETS"
echo "$CONTEXT"
- name: Setup Config
run: sed "s/ACCESS_TOKEN/$ACCESS_TOKEN/g" .nuget.config > nuget.config
- run: cat nuget.config
- name: Build
run: dotnet build -c Release
- name: Publish
run: chmod +x ./push.sh && ./push.sh
GITHUB_TOKEN 和 ACCESS_TOKEN 等自定义密码均无效。
加法01:
即使将环境变量名称设置为 GITHUB_TOKEN 也无法正常工作
name: Build and Publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
...
更新
是的,这是可能的,但这是一种非常糟糕的做法。如果你必须,你可以使用以下命令,它可以避开 Github 的安全措施,以防止秘密泄露日志
run: echo MYSECRET | sed -e 's/\(.\)/ /g'
# this will print "M Y S E C R E T"
只需将 MYSECRET
替换为您要打印的秘密即可,例如$GITHUB_TOKEN
.
旧答案
Checkout this other answer 这似乎是 Github 操作的预期行为。
As you can see, I can get (and use) the value of the environment variables, but the secrets aren't being exposed.
那是因为它们是秘密。 Actions 输出已明确清除机密,因此不会显示。
文件内容仍然包含机密内容。
更新:
这是关于如何将秘密传递到行动步骤的常规约定。
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
这就是我在行动中使用它的方式。
更新2
在此处查看有关如何打印机密的详细说明,但强烈建议不要这样做。
出现这个问题是因为我的一个误解,我认为如果正确传递给操作,秘密值应该显示在日志中。
我把 and bk2204 的答案结合起来说清楚。
在操作日志中删除了秘密值。不要期望在操作日志中看到实际值。获取擦除的文本意味着值已传递给操作。您可以在脚本中使用该值,但无法在日志中看到它们。检查 如何查看值,但不推荐这样做。
我正在尝试创建工作流以使用 Github 操作将 Nuget 包部署到 Github 包存储库。
在这种情况下,
- 存储库在组织内部
- 我是那个组织的所有者
- 我有存储库的管理员权限
- 存储库中列出了秘密
- 提交是我的
- 提交是对分支的直接提交
但操作无法访问机密
以下是我尝试执行的工作流程
name: Build and Publish
on:
push:
branches:
- gh-packages
jobs:
build_and_publish:
env:
ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
name: Publish Packages to NuGet
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-dotnet@v1
with:
dotnet-version: "3.0.100"
- name: Dump Github Context
env:
CONTEXT: ${{ toJson(github) }}
SECRETS: ${{ toJson(secrets) }}
TOK: ${{ secrets.ACCESS_TOKEN }}
TEST: ${{ secrets.TEST }
run: |
echo $ACCESS_TOKEN
echo $TOK
echo $TEST
echo $GITHUB_TOKEN
echo "$SECRETS"
echo "$CONTEXT"
- name: Setup Config
run: sed "s/ACCESS_TOKEN/$ACCESS_TOKEN/g" .nuget.config > nuget.config
- run: cat nuget.config
- name: Build
run: dotnet build -c Release
- name: Publish
run: chmod +x ./push.sh && ./push.sh
GITHUB_TOKEN 和 ACCESS_TOKEN 等自定义密码均无效。
加法01:
即使将环境变量名称设置为 GITHUB_TOKEN 也无法正常工作
name: Build and Publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
...
更新
是的,这是可能的,但这是一种非常糟糕的做法。如果你必须,你可以使用以下命令,它可以避开 Github 的安全措施,以防止秘密泄露日志
run: echo MYSECRET | sed -e 's/\(.\)/ /g'
# this will print "M Y S E C R E T"
只需将 MYSECRET
替换为您要打印的秘密即可,例如$GITHUB_TOKEN
.
旧答案
Checkout this other answer 这似乎是 Github 操作的预期行为。
As you can see, I can get (and use) the value of the environment variables, but the secrets aren't being exposed.
那是因为它们是秘密。 Actions 输出已明确清除机密,因此不会显示。
文件内容仍然包含机密内容。
更新:
这是关于如何将秘密传递到行动步骤的常规约定。
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
这就是我在行动中使用它的方式。
更新2
在此处查看有关如何打印机密的详细说明,但强烈建议不要这样做。
出现这个问题是因为我的一个误解,我认为如果正确传递给操作,秘密值应该显示在日志中。
我把
在操作日志中删除了秘密值。不要期望在操作日志中看到实际值。获取擦除的文本意味着值已传递给操作。您可以在脚本中使用该值,但无法在日志中看到它们。检查