为什么操作无法访问机密?

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

在此处查看有关如何打印机密的详细说明,但强烈建议不要这样做。

https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets#limits-for-secrets

出现这个问题是因为我的一个误解,我认为如果正确传递给操作,秘密值应该显示在日志中。

我把 and bk2204 的答案结合起来说清楚。

在操作日志中删除了秘密值。不要期望在操作日志中看到实际值。获取擦除的文本意味着值已传递给操作。您可以在脚本中使用该值,但无法在日志中看到它们。检查 如何查看值,但不推荐这样做。